Skip to content

Commit 49eb5a0

Browse files
committed
20190122
1 parent b8956c8 commit 49eb5a0

File tree

5 files changed

+108
-13
lines changed

5 files changed

+108
-13
lines changed

TopInterview.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,16 @@
2121
| 021 | [Merge Two Sorted Lists](https://leetcode.com/problems/merge-two-sorted-lists/) | Easy | [Java](./code/lc21.java)
2222
| 022 | [Generate Parentheses](https://leetcode.com/problems/generate-parentheses/) |Medium| [Java](./code/lc22.java)
2323
| 023 | [Merge k Sorted Lists](https://leetcode.com/problems/merge-k-sorted-lists/) | Hard | [Java](./code/lc23.java)
24-
24+
| 029 |
2525

2626
| 033 | [Search in Rotated Sorted Array](https://leetcode.com/problems/search-in-rotated-sorted-array/) |Medium| [Java](./code/lc33.java)
2727
| 034 | [Search for a Range](https://leetcode.com/problems/search-for-a-range/) |Medium| [Java](./code/lc34.java)
2828
| 035 | [Search Insert Position](https://leetcode.com/problems/search-insert-position/) |Medium| [Java](./code/lc35.java)
29-
29+
| 041 |
3030

3131

3232
| 042 | [Trapping Rain Water](https://leetcode.com/problems/trapping-rain-water/) | Hard | [Java](./code/lc42.java)
33+
| 044 |
3334

3435
| 046 | [Permutations](https://leetcode.com/problems/permutations/) |Medium| [Java](./code/lc46.java)
3536
| 048 | [Rotate Image](https://leetcode.com/problems/rotate-image/) |Medium| [Java](./code/lc48.java)

code/lc29.java

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package code;
2+
/*
3+
* 29. Divide Two Integers
4+
* 题意:不用乘法,除法,取模运算实现除法
5+
* 难度:Medium
6+
* 分类:Math, Binary Search
7+
* 思路:被除数减去除数,除数每次左移一位,也就是*2 来实现类似二分的思想
8+
* Tips:注意下用long类型,以及溢出的情况
9+
*/
10+
public class lc29 {
11+
public static void main(String[] args) {
12+
System.out.println(divide(-1010369383,-2147483648));
13+
}
14+
public static int divide(int dividend, int divisor) {
15+
if(divisor==0||dividend==Integer.MIN_VALUE&&divisor==-1) return Integer.MAX_VALUE; //溢出的话直接返回最小值
16+
int sign;
17+
if( (dividend>0&&divisor>0) || (dividend<0&&divisor<0) ) sign = 1;
18+
else sign = -1;
19+
long dividend2 = Math.abs((long)dividend); //注意这要强制转换成long,再取abs
20+
long divisor2 = Math.abs((long)divisor);
21+
long div = divisor2;
22+
long res = 0; //这里也是long
23+
int p = 0;
24+
while( !(div>dividend2 && div==divisor2) ){
25+
long temp = dividend2 - div;
26+
if(temp>=0){
27+
res += Math.pow(2, p);
28+
p++;
29+
div = div << 1;
30+
dividend2 = temp;
31+
}else{
32+
div = divisor2;
33+
p = 0;
34+
}
35+
}
36+
return (int)res*sign;
37+
}
38+
}

code/lc41.java

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package code;
2+
/*
3+
* 41. First Missing Positive
4+
* 题意:返回数组中最小的未出现的正整数
5+
* 难度:Hard
6+
* 分类:Array
7+
* 思路:未出现的正整数一定在 [1~nums.length+1] 中,理解了这一点就好做了
8+
* Tips:
9+
*/
10+
public class lc41 {
11+
public static void main(String[] args) {
12+
int[] nums = {1,1};
13+
System.out.println(firstMissingPositive(nums));
14+
}
15+
public static int firstMissingPositive(int[] nums) {
16+
for (int i = 0; i < nums.length ; i++) {
17+
if(nums[i]>0&&nums[i]<=nums.length&&nums[nums[i]-1]!=nums[i]){ //第三个判断条件判断要交换的位置上是否已经就为了,防止重复元素死循环
18+
int temp = nums[nums[i]-1];
19+
nums[nums[i]-1] = nums[i];
20+
nums[i] = temp;
21+
i--;
22+
}
23+
}
24+
for (int i = 0; i < nums.length ; i++) {
25+
if(nums[i]!=i+1)
26+
return i+1;
27+
}
28+
return nums.length+1;
29+
}
30+
}

code/lc44.java

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package code;
2+
/*
3+
* 44. Wildcard Matching
4+
* 题意:通配符匹配
5+
* 难度:Hard
6+
* 分类:String, Dynamic Programming, Backtracking, Greedy
7+
* 思路:二维dp,和lc10很像,比lc10要简单一些。空间还可以压缩。
8+
* Tips:bingo
9+
*/
10+
public class lc44 {
11+
public static void main(String[] args) {
12+
System.out.println(isMatch("cb","?b"));
13+
}
14+
public static boolean isMatch(String s, String p) {
15+
boolean[][] dp = new boolean[s.length()+1][p.length()+1];
16+
dp[0][0] = true;
17+
char[] s_ch = s.toCharArray();
18+
char[] p_ch = p.toCharArray();
19+
for (int i = 0; i < p.length() ; i++) {
20+
if(p_ch[i]=='*') dp[0][i+1]=true;
21+
else break;
22+
}
23+
for (int i = 1; i <= s.length() ; i++) {
24+
for (int j = 1; j <= p.length() ; j++) {
25+
if(s_ch[i-1]==p_ch[j-1] || p_ch[j-1]=='?') dp[i][j] = dp[i-1][j-1];
26+
if(p_ch[j-1]=='*') dp[i][j] = dp[i-1][j-1] || dp[i-1][j] || dp[i][j-1];
27+
//dp[i-1][j-1] *任意第一个字符
28+
//dp[i-1][j] *匹配后续任意
29+
//dp[i][j-1] *匹配空
30+
}
31+
}
32+
return dp[s.length()][p.length()];
33+
}
34+
}

readme.md

+3-11
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ Language: Java
2424
| 010 [Java](./code/lc10.java)
2525
| 011 [Java](./code/lc11.java)
2626
| 013 [Java](./code/lc13java)
27-
2827
| 014 [Java](./code/lc14java)
2928
| 015 [Java](./code/lc15java)
3029
| 017 [Java](./code/lc17.java)
@@ -35,18 +34,19 @@ Language: Java
3534
| 023 [Java](./code/lc23.java)
3635
| 026 [Java](./code/lc26.java)
3736
| 028 [Java](./code/lc28.java)
38-
37+
| 029 [Java](./code/lc29.java)
3938
| 031 [Java](./code/lc31.java)
4039
| 032 [Java](./code/lc32.java)
4140
| 033 [Java](./code/lc33.java)
4241
| 034 [Java](./code/lc34.java)
4342
| 038 [Java](./code/lc38.java)
4443
| 039 [Java](./code/lc39.java)
44+
| 041 [Java](./code/lc41.java)
4545
| 042 [Java](./code/lc42.java)
46+
| 044 [Java](./code/lc44.java)
4647
| 046 [Java](./code/lc46.java)
4748
| 048 [Java](./code/lc48.java)
4849
| 049 [Java](./code/lc49.java)
49-
5050
| 053 [Java](./code/lc53.java)
5151
| 055 [Java](./code/lc55.java)
5252
| 056 [Java](./code/lc56.java)
@@ -57,7 +57,6 @@ Language: Java
5757
| 066 [Java](./code/lc66.java)
5858
| 069 [Java](./code/lc69.java)
5959
| 070 [Java](./code/lc70.java)
60-
6160
| 072 [Java](./code/lc72.java)
6261
| 075 [Java](./code/lc75.java)
6362
| 076 [Java](./code/lc76.java)
@@ -68,7 +67,6 @@ Language: Java
6867
| 088 [Java](./code/lc88.java)
6968
| 094 [Java](./code/lc94.java)
7069
| 096 [Java](./code/lc96.java)
71-
7270
| 098 [Java](./code/lc98.java)
7371
| 101 [Java](./code/lc101.java)
7472
| 102 [Java](./code/lc102.java)
@@ -79,7 +77,6 @@ Language: Java
7977
| 122 [Java](./code/lc122.java)
8078
| 124 [Java](./code/lc124.java)
8179
| 128 [Java](./code/lc128.java)
82-
8380
| 136 [Java](./code/lc136.java)
8481
| 139 [Java](./code/lc139.java)
8582
| 141 [Java](./code/lc141.java)
@@ -90,7 +87,6 @@ Language: Java
9087
| 148 [Java](./code/lc148.java)
9188
| 152 [Java](./code/lc152.java)
9289
| 155 [Java](./code/lc155.java)
93-
9490
| 160 [Java](./code/lc160.java)
9591
| 169 [Java](./code/lc169.java)
9692
| 198 [Java](./code/lc198.java)
@@ -101,7 +97,6 @@ Language: Java
10197
| 215 [Java](./code/lc215.java)
10298
| 221 [Java](./code/lc221.java)
10399
| 226 [Java](./code/lc226.java)
104-
105100
| 234 [Java](./code/lc234.java)
106101
| 238 [Java](./code/lc238.java)
107102
| 239 [Java](./code/lc239.java)
@@ -112,7 +107,6 @@ Language: Java
112107
| 297 [Java](./code/lc297.java)
113108
| 300 [Java](./code/lc300.java)
114109
| 301 [Java](./code/lc301.java)
115-
116110
| 309 [Java](./code/lc309.java)
117111
| 312 [Java](./code/lc312.java)
118112
| 322 [Java](./code/lc322.java)
@@ -123,7 +117,6 @@ Language: Java
123117
| 406 [Java](./code/lc406.java)
124118
| 416 [Java](./code/lc416.java)
125119
| 437 [Java](./code/lc437.java)
126-
127120
| 438 [Java](./code/lc438.java)
128121
| 448 [Java](./code/lc448.java)
129122
| 461 [Java](./code/lc461.java)
@@ -134,6 +127,5 @@ Language: Java
134127
| 581 [Java](./code/lc581.java)
135128
| 617 [Java](./code/lc617.java)
136129
| 621 [Java](./code/lc621.java)
137-
138130
| 647 [Java](./code/lc647.java)
139131
| 771 [Java](./code/lc771.java)

0 commit comments

Comments
 (0)