Skip to content

Commit 6c4a479

Browse files
committed
20190118
1 parent 2850c15 commit 6c4a479

File tree

3 files changed

+133
-0
lines changed

3 files changed

+133
-0
lines changed

code/lc394.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package code;
2+
/*
3+
* 394. Decode String
4+
* 题意:解码字符串
5+
* 难度:Medium
6+
* 分类:Stack, Depth-first Search
7+
* 思路:用栈
8+
* Tips:可以用两个栈,一个字符串入栈,而不是字符入栈,另一个数字入栈。提高运行速度,不用重复遍历字符。
9+
*/
10+
import java.util.Stack;
11+
12+
public class lc394 {
13+
public static void main(String[] args) {
14+
System.out.println(decodeString("2[abc]3[cd]ef"));
15+
}
16+
public static String decodeString(String s) {
17+
Stack<Character> st = new Stack();
18+
int i = 0;
19+
char[] str_arr = s.toCharArray();
20+
StringBuilder res = new StringBuilder();
21+
22+
while(i<s.length()){
23+
if(str_arr[i]==']'){
24+
StringBuilder temp = new StringBuilder();
25+
StringBuilder num = new StringBuilder();
26+
while(st.peek()!='['){
27+
temp.insert(0, st.pop());
28+
}
29+
st.pop(); // pop出 [
30+
while(!st.isEmpty() && Character.isDigit(st.peek())){
31+
num.insert(0, st.pop());
32+
}
33+
StringBuilder temp2 = new StringBuilder();
34+
for (int j = 0; j < Integer.valueOf(num.toString()) ; j++) {
35+
temp2.append(temp.toString());
36+
}
37+
//入栈
38+
for (int j = 0; j < temp2.toString().length() ; j++) {
39+
st.push(temp2.toString().toCharArray()[j]);
40+
}
41+
}else{
42+
st.push(str_arr[i]);
43+
}
44+
i++;
45+
}
46+
// 别忘了末尾的
47+
StringBuilder sb1 = new StringBuilder();
48+
while(!st.isEmpty()){
49+
sb1.insert(0, st.pop());
50+
}
51+
res.append(sb1);
52+
return res.toString();
53+
}
54+
}

code/lc406.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package code;
2+
/*
3+
* 406. Queue Reconstruction by Height
4+
* 题意:队列重构,每个元素有两个值,一个是身高,一个是他前边有几个比他高的,相同身高也算比他高
5+
* 难度:Medium
6+
* 分类:Greedy
7+
* 思路:每次把当前最高身高的挑出来,按第二个值排序插进来
8+
* E.g.
9+
* input: [[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
10+
* subarray after step 1: [[7,0], [7,1]]
11+
* subarray after step 2: [[7,0], [6,1], [7,1]]
12+
* Tips:看下别人的代码,写的很简洁。注意相关的接口和方法。
13+
*/
14+
import java.util.Arrays;
15+
import java.util.Comparator;
16+
import java.util.LinkedList;
17+
import java.util.List;
18+
19+
public class lc406 {
20+
public static void main(String[] args) {
21+
int[][] people = {{7,0}, {4,4}, {7,1}, {5,0}, {6,1}, {5,2}};
22+
reconstructQueue(people);
23+
}
24+
public static int[][] reconstructQueue(int[][] people) {
25+
Arrays.sort(people,new Comparator<int[]>(){
26+
@Override
27+
public int compare(int[] o1, int[] o2){
28+
return o1[0]!=o2[0]?-o1[0]+o2[0]:o1[1]-o2[1]; //按身高降序排序,如果身高相同,则按前边有几个人增序排序
29+
}
30+
});
31+
List<int[]> res = new LinkedList<>();
32+
for(int[] cur : people){
33+
res.add(cur[1],cur); //用于在列表的指定位置插入指定元素,并将当前处于该位置的元素及其后续元素的索引加1
34+
}
35+
return res.toArray(new int[people.length][]); //list转array,需要传入一个array对象
36+
}
37+
}

code/lc416.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package code;
2+
3+
import java.util.HashSet;
4+
/*
5+
* 416. Partition Equal Subset Sum
6+
* 题意:一个数组,可否分成和相等的两部分
7+
* 难度:Medium
8+
* 分类:Dynamic Programming
9+
* 思路:题意可以转换为用任意个元素组成的和等于数组和/2。可以和 lc1, lc15 3-Sum 对比。
10+
* 0,1背包问题,递推比较简单,所以空间可以压缩成一维
11+
* 自己想的思路其实和压缩后的0,1背包类似,但没想到该问题可以抽象为0,1背包
12+
* Tips:
13+
*/
14+
public class lc416 {
15+
public static void main(String[] args) {
16+
int[] nums = {1, 2, 5};
17+
System.out.println(canPartition(nums));
18+
}
19+
public static boolean canPartition(int[] nums) {
20+
int sum = 0;
21+
for (int i : nums) {
22+
sum+=i;
23+
}
24+
if(sum%2==1)
25+
return false;
26+
sum/=2;
27+
HashSet<Integer> s = new HashSet();
28+
for (int i = 0; i < nums.length ; i++) {
29+
if(nums[i]==sum)
30+
return true;
31+
HashSet<Integer> s2 = new HashSet(); // 新建一个set,用以存放这一轮的结果
32+
s2.add(nums[i]);
33+
for(int j: s){
34+
if(j+nums[i]==sum)
35+
return true;
36+
s2.add(j+nums[i]);
37+
}
38+
s.addAll(s2);
39+
}
40+
return false;
41+
}
42+
}

0 commit comments

Comments
 (0)