Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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

‎code/lc15.java

Lines changed: 1 addition & 0 deletions
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

‎code/lc16.java

Lines changed: 1 addition & 1 deletion
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) {

‎code/lc53.java

Lines changed: 1 addition & 0 deletions
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) {

‎code/lc560.java

Lines changed: 1 addition & 1 deletion
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,那么就是一个解

‎code/lc921.java

Lines changed: 25 additions & 0 deletions
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+
}

‎code/lc922.java

Lines changed: 38 additions & 0 deletions
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+
}

‎code/lc923.java

Lines changed: 73 additions & 0 deletions
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+
}

‎code/lc978.java

Lines changed: 28 additions & 0 deletions
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+
}

‎readme.md

Lines changed: 3 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /