Skip to content

Commit 71a611a

Browse files
committed
20190324
1 parent 2d9f477 commit 71a611a

File tree

9 files changed

+171
-2
lines changed

9 files changed

+171
-2
lines changed

Diff for: code/lc15.java

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
* 难度:Medium
66
* 分类:Array, Two Pointers
77
* 注意:如何避免 List 重复元素
8+
* Tips:lc15, lc16, lc923
89
*/
910
import java.util.*;
1011

Diff for: code/lc16.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* 难度:Medium
88
* 分类:Array, Two Pointers
99
* 思路:3sum的思路,每次记下最接近的res即可
10-
* Tips:
10+
* Tips:lc15, lc16, lc923
1111
*/
1212
public class lc16 {
1313
public int threeSumClosest(int[] nums, int target) {

Diff for: code/lc53.java

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
* 难度:Easy
66
* 分类:Array, Divide and Conquer, Dynamic Programming
77
* 注意:分治方法如何进行merge,merge时,必须包含mid元素,因为是连续子序列
8+
* lc978
89
*/
910
public class lc53 {
1011
public static void main(String[] args) {

Diff for: code/lc560.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
/*
66
* 560. Subarray Sum Equals K
7-
* 题意:子数组的和等于k的个数
7+
* 题意:连续子数组的和等于k的个数
88
* 难度:Medium
99
* 分类:Array, Hash Table
1010
* 思路:求出累加和存在hashmap中,如果当前hashmap中存在sum-k,那么就是一个解

Diff for: code/lc921.java

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package code;
2+
3+
import java.util.Stack;
4+
/*
5+
* 921. Minimum Add to Make Parentheses Valid
6+
* 题意:最少添加符号个数,使得表达式有效
7+
* 难度:Medium
8+
* 分类:Stack, Greedy
9+
* 思路:匹配的都出栈,最后剩下的栈中没匹配的个数,就是需要添加的个数
10+
* Tips:
11+
*/
12+
public class lc921 {
13+
public int minAddToMakeValid(String S) {
14+
char[] ch_arr = S.toCharArray();
15+
Stack<Character> st = new Stack<>();
16+
for (int i = 0; i < ch_arr.length ; i++) {
17+
if(ch_arr[i]==')' && !st.isEmpty() && st.peek()=='('){
18+
st.pop();
19+
}else{
20+
st.push(ch_arr[i]);
21+
}
22+
}
23+
return st.size();
24+
}
25+
}

Diff for: code/lc922.java

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package code;
2+
/*
3+
* 922. Sort Array By Parity II
4+
* 题意:奇数位置上都是奇数,偶数位置上都是偶数
5+
* 难度:Easy
6+
* 分类:Array, Sort
7+
* 思路:题看似简单,但最优的方法并不好写
8+
* Tips:
9+
*/
10+
public class lc922 {
11+
public int[] sortArrayByParityII(int[] A) { //O(N^2)
12+
for (int i = 0; i < A.length ; i++) {
13+
if( A[i]%2==i%2 ) continue;
14+
for (int j = i+1; j < A.length ; j++) {
15+
if(A[i]%2!=A[j]%2) {
16+
int temp = A[i];
17+
A[i] = A[j];
18+
A[j] = temp;
19+
break;
20+
}
21+
}
22+
}
23+
return A;
24+
}
25+
26+
public int[] sortArrayByParityII2(int[] A) { //很巧妙的方法 O(N)时间, O(1)空间
27+
int cur = 1; //奇数位置的位置
28+
for (int i = 0; i < A.length ; i+=2) { //这里+2 只判断偶数位置上是否符合
29+
if(A[i]%2==1){
30+
while(A[cur]%2==1) cur+=2;
31+
int temp = A[cur];
32+
A[cur] = A[i];
33+
A[i] = temp;
34+
}
35+
}
36+
return A;
37+
}
38+
}

Diff for: code/lc923.java

+73
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package code;
2+
import java.util.Arrays;
3+
import java.util.HashMap;
4+
5+
/*
6+
* 923. 3Sum With Multiplicity
7+
* 题意:3Sum有几种?数组中有重复数字
8+
* 难度:Medium
9+
* 分类:Two Pointers
10+
* 思路:由于本题只要求给出多少种Int值,所以不一定非要用3Sum的思路,有很多更简答的方法
11+
* 3种思路
12+
* Tips:
13+
*/
14+
public class lc923 {
15+
public int threeSumMulti(int[] A, int target) {
16+
int res = 0;
17+
HashMap<Integer, Integer> hm = new HashMap();
18+
for (int i = 0; i < A.length ; i++) {
19+
res = (res+hm.getOrDefault(target-A[i],0))%1000000007; // i之前的数字,两个组合起来,是否 == target-A[i]
20+
for (int j = 0; j < i ; j++) {
21+
hm.put(A[i]+A[j], hm.getOrDefault(A[i]+A[j], 0)+1);
22+
}
23+
}
24+
return res;
25+
}
26+
public int threeSumMulti2(int[] A, int target) { //3Sum的思路
27+
int res = 0;
28+
Arrays.sort(A);
29+
for (int i = 0; i < A.length-2 ; i++) {
30+
int left = i+1, right = A.length-1;
31+
while(left<right){
32+
if(A[i]+A[left]+A[right]<target) left++;
33+
else if(A[i]+A[left]+A[right]>target) right--;
34+
else if(A[left]==A[right]) { //如果相等,则直接 C N 取 2,计算出来,然后break
35+
res = (res + (right-left)*(right-left+1)/2)%1000000007;
36+
break; //不用继续移动指针了
37+
} else {
38+
int leftcount = 1, rightcount = 1;
39+
while(A[left]==A[left+1]) {
40+
left++;
41+
leftcount++;
42+
}
43+
while(A[right]==A[right-1]) {
44+
right--;
45+
rightcount++;
46+
}
47+
res = (res + leftcount*rightcount)%1000000007;
48+
left++; //别忘了,最后还要操作一下
49+
right--;
50+
}
51+
}
52+
}
53+
return res;
54+
}
55+
56+
public int threeSumMulti3(int[] A, int target) { //直接数学计算
57+
long[] c = new long[101];
58+
for (int a : A) c[a]++;
59+
long res = 0;
60+
for (int i = 0; i <= 100; i++) // 题目给了值不超过100
61+
for (int j = i; j <= 100; j++) {
62+
int k = target - i - j;
63+
if (k > 100 || k < 0) continue;
64+
if (i == j && j == k)
65+
res += c[i] * (c[i] - 1) * (c[i] - 2) / 6;
66+
else if (i == j && j != k)
67+
res += c[i] * (c[i] - 1) / 2 * c[k];
68+
else if (j < k)
69+
res += c[i] * c[j] * c[k];
70+
}
71+
return (int)(res % (1e9 + 7));
72+
}
73+
}

Diff for: code/lc978.java

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package code;
2+
/*
3+
* 978. Longest Turbulent Subarray
4+
* 题意:小,大,小,大 这种最大长度是多少
5+
* 难度:Medium
6+
* 分类:Array, Dynamic Porgramming, Sliding Windows
7+
* 思路:O(n) 遍历一遍就能解决,不用dp
8+
* Tips:lc53
9+
*/
10+
public class lc978 {
11+
public int maxTurbulenceSize(int[] A) {
12+
int inc = 1, dec = 1, result = 1;
13+
for (int i = 1; i < A.length; i++) {
14+
if (A[i] < A[i - 1]) { // +1 并且重置另一个统计量
15+
dec = inc + 1;
16+
inc = 1;
17+
} else if (A[i] > A[i - 1]) {
18+
inc = dec + 1;
19+
dec = 1;
20+
} else {
21+
inc = 1;
22+
dec = 1;
23+
}
24+
result = Math.max(result, Math.max(dec, inc));
25+
}
26+
return result;
27+
}
28+
}

Diff for: readme.md

+3
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ LeetCode 指南
9898
| 104 [Java](./code/lc104.java)
9999
| 105 [Java](./code/lc105.java)
100100
| 108 [Java](./code/lc108.java)
101+
| 112 [Java](./code/lc112.java)
101102
| 113 [Java](./code/lc113.java)
102103
| 114 [Java](./code/lc114.java)
103104
| 116 [Java](./code/lc116.java)
@@ -111,6 +112,7 @@ LeetCode 指南
111112
| 125 [Java](./code/lc125.java)
112113
| 127 [Java](./code/lc127.java)
113114
| 128 [Java](./code/lc128.java)
115+
| 129 [Java](./code/lc129.java)
114116
| 130 [Java](./code/lc130.java)
115117
| 131 [Java](./code/lc131.java)
116118
| 134 [Java](./code/lc134.java)
@@ -126,6 +128,7 @@ LeetCode 指南
126128
| 148 [Java](./code/lc148.java)
127129
| 149 [Java](./code/lc149.java)
128130
| 150 [Java](./code/lc150.java)
131+
| 151 [Java](./code/lc151.java)
129132
| 152 [Java](./code/lc152.java)
130133
| 155 [Java](./code/lc155.java)
131134
| 160 [Java](./code/lc160.java)

0 commit comments

Comments
 (0)