Skip to content

Commit b04044c

Browse files
左程云左程云
authored andcommitted
modify code on class
1 parent a6ac134 commit b04044c

File tree

4 files changed

+111
-34
lines changed

4 files changed

+111
-34
lines changed

src/topinterviewquestions/Problem_0026_RemoveDuplicatesFromSortedArray.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ public static int removeDuplicates(int[] nums) {
99
if (nums.length < 2) {
1010
return nums.length;
1111
}
12-
int index = 0;
13-
for (int i = 0; i < nums.length; i++) {
14-
if (i == 0 || nums[i - 1] != nums[i]) {
15-
nums[index++] = nums[i];
12+
int done = 0;
13+
for (int i = 1; i < nums.length; i++) {
14+
if (nums[i] != nums[done]) {
15+
nums[++done] = nums[i];
1616
}
1717
}
18-
return index;
18+
return done + 1;
1919
}
2020

2121
}

src/topinterviewquestions/Problem_0029_DivideTwoIntegers.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,14 +53,31 @@ public static int divide(int dividend, int divisor) {
5353
if (divisor == Integer.MIN_VALUE) {
5454
return dividend == Integer.MIN_VALUE ? 1 : 0;
5555
}
56+
// 除数不是系统最小
5657
if (dividend == Integer.MIN_VALUE) {
5758
if (divisor == negNum(1)) {
5859
return Integer.MAX_VALUE;
5960
}
6061
int res = div(add(dividend, 1), divisor);
6162
return add(res, div(minus(dividend, multi(res, divisor)), divisor));
6263
}
64+
// dividend不是系统最小,divisor也不是系统最小
6365
return div(dividend, divisor);
6466
}
67+
// div(a,b) a和b都不能是系统最小
68+
69+
// 现场福利函数
70+
public static String printNumBinary(int num) {
71+
StringBuilder builder = new StringBuilder();
72+
for (int i = 31; i >= 0; i--) {
73+
builder.append(((num >> i) & 1) == 0 ? '0' : '1');
74+
}
75+
return builder.toString();
76+
}
77+
78+
public static void main(String[] args) {
79+
int num = -1;
80+
System.out.println(printNumBinary(num));
81+
}
6582

6683
}

src/topinterviewquestions/Problem_0033_SearchInRotatedSortedArray.java

Lines changed: 33 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,49 +3,53 @@
33
public class Problem_0033_SearchInRotatedSortedArray {
44

55
public static int search(int[] arr, int num) {
6-
int low = 0;
7-
int high = arr.length - 1;
8-
int mid = 0;
9-
while (low <= high) {
10-
mid = (low + high) / 2;
11-
if (arr[mid] == num) {
12-
return mid;
6+
int L = 0;
7+
int R = arr.length - 1;
8+
int M = 0;
9+
while (L <= R) {
10+
M = (L + R) / 2;
11+
if (arr[M] == num) {
12+
return M;
1313
}
14-
if (arr[low] == arr[mid] && arr[mid] == arr[high]) {
15-
while (low != mid && arr[low] == arr[mid]) {
16-
low++;
14+
// arr[M] != num
15+
if (arr[L] == arr[M] && arr[M] == arr[R]) {
16+
while (L != M && arr[L] == arr[M]) {
17+
L++;
1718
}
18-
if (low == mid) {
19-
low = mid + 1;
19+
// L和M没撞上,[L]!=[M] L,.....M
20+
if (L == M) {
21+
L = M + 1;
2022
continue;
2123
}
2224
}
23-
if (arr[low] != arr[mid]) {
24-
if (arr[mid] > arr[low]) {
25-
if (num >= arr[low] && num < arr[mid]) {
26-
high = mid - 1;
25+
// arr[M] != num
26+
// [L] [M] [R] 不都一样的情况
27+
if (arr[L] != arr[M]) {
28+
if (arr[M] > arr[L]) {
29+
if (num >= arr[L] && num < arr[M]) {
30+
R = M - 1;
2731
} else {
28-
low = mid + 1;
32+
L = M + 1;
2933
}
30-
} else {
31-
if (num > arr[mid] && num <= arr[high]) {
32-
low = mid + 1;
34+
} else { // [L] > [M]
35+
if (num > arr[M] && num <= arr[R]) {
36+
L = M + 1;
3337
} else {
34-
high = mid - 1;
38+
R = M - 1;
3539
}
3640
}
37-
} else {
38-
if (arr[mid] < arr[high]) {
39-
if (num > arr[mid] && num <= arr[high]) {
40-
low = mid + 1;
41+
} else { // [L] === [M] -> [M]!=[R]
42+
if (arr[M] < arr[R]) {
43+
if (num > arr[M] && num <= arr[R]) {
44+
L = M + 1;
4145
} else {
42-
high = mid - 1;
46+
R = M - 1;
4347
}
4448
} else {
45-
if (num >= arr[low] && num < arr[mid]) {
46-
high = mid - 1;
49+
if (num >= arr[L] && num < arr[M]) {
50+
R = M - 1;
4751
} else {
48-
low = mid + 1;
52+
L = M + 1;
4953
}
5054
}
5155
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package topinterviewquestions;
2+
3+
public class Problem_0037_SudokuSolver {
4+
5+
public static void solveSudoku(char[][] board) {
6+
boolean[][] row = new boolean[9][10];
7+
boolean[][] col = new boolean[9][10];
8+
boolean[][] bucket = new boolean[9][10];
9+
initMaps(board, row, col, bucket);
10+
process(board, 0, 0, row, col, bucket);
11+
}
12+
13+
public static void initMaps(char[][] board, boolean[][] row, boolean[][] col, boolean[][] bucket) {
14+
for (int i = 0; i < 9; i++) {
15+
for (int j = 0; j < 9; j++) {
16+
int bid = 3 * (i / 3) + (j / 3);
17+
if (board[i][j] != '.') {
18+
int num = board[i][j] - '0';
19+
row[i][num] = true;
20+
col[j][num] = true;
21+
bucket[bid][num] = true;
22+
}
23+
}
24+
}
25+
}
26+
27+
public static boolean process(char[][] board, int i, int j, boolean[][] row, boolean[][] col, boolean[][] bucket) {
28+
if (i == 9) {
29+
return true;
30+
}
31+
int nexti = j != 8 ? i : i + 1;
32+
int nextj = j != 8 ? j + 1 : 0;
33+
if (board[i][j] != '.') {
34+
return process(board, nexti, nextj, row, col, bucket);
35+
} else {
36+
int bid = 3 * (i / 3) + (j / 3);
37+
for (int num = 1; num <= 9; num++) {
38+
if ((!row[i][num]) && (!col[j][num]) && (!bucket[bid][num])) {
39+
row[i][num] = true;
40+
col[j][num] = true;
41+
bucket[bid][num] = true;
42+
board[i][j] = (char) (num + '0');
43+
if (process(board, nexti, nextj, row, col, bucket)) {
44+
return true;
45+
}
46+
row[i][num] = false;
47+
col[j][num] = false;
48+
bucket[bid][num] = false;
49+
board[i][j] = '.';
50+
}
51+
}
52+
return false;
53+
}
54+
}
55+
56+
}

0 commit comments

Comments
 (0)