Skip to content

Commit 163e0fd

Browse files
左程云左程云
authored andcommitted
modify on class
1 parent 0b41169 commit 163e0fd

File tree

4 files changed

+120
-8
lines changed

4 files changed

+120
-8
lines changed

src/topinterviewquestions/Problem_0045_JumpGameII.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,20 @@ public static int jump(int[] arr) {
66
if (arr == null || arr.length == 0) {
77
return 0;
88
}
9-
int jump = 0;
9+
int step = 0;
1010
int cur = 0;
11-
int next = 0;
12-
for (int i = 0; i < arr.length; i++) {
11+
int next = arr[0];
12+
for (int i = 1; i < arr.length; i++) {
13+
// if(next >= arr.length - 1){
14+
// return step + 1;
15+
// }
1316
if (cur < i) {
14-
jump++;
17+
step++;
1518
cur = next;
1619
}
1720
next = Math.max(next, i + arr[i]);
1821
}
19-
return jump;
22+
return step;
2023
}
2124

2225
}

src/topinterviewquestions/Problem_0045_JumpGameIIFollowUpOnClass.java

Lines changed: 77 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,80 @@
66

77
public class Problem_0045_JumpGameIIFollowUpOnClass {
88

9+
// start 和 end从1开始
10+
public static int jump1(int N, int start, int end, int[] arr) {
11+
boolean[] walk = new boolean[N];
12+
return f(arr, N, end, start, walk);
13+
}
14+
15+
// 从i位置到end,至少要几步
16+
// walk[i-1] == false i之前没到过
17+
// walk[i-1] == true i之前到过
18+
public static int f(int[] arr, int N, int end, int i, boolean[] walk) {
19+
if (i < 1) {
20+
return -1;
21+
}
22+
if (i > N) {
23+
return -1;
24+
}
25+
if (walk[i - 1]) {
26+
return -1;
27+
}
28+
if (i == end) {
29+
return 0;
30+
}
31+
walk[i - 1] = true;
32+
int left = i - arr[i - 1];
33+
int right = i + arr[i - 1];
34+
int next = -1;
35+
int ans1 = f(arr, N, end, left, walk);
36+
int ans2 = f(arr, N, end, right, walk);
37+
if (ans1 != -1 && ans2 != -1) {
38+
next = Math.min(ans1, ans2);
39+
} else if (ans1 != -1) {
40+
next = ans1;
41+
} else if (ans2 != -1) {
42+
next = ans2;
43+
}
44+
walk[i - 1] = false;
45+
if (next == -1) {
46+
return -1;
47+
}
48+
return next + 1;
49+
}
50+
51+
public static int jump2(int N, int start, int end, int[] arr) {
52+
return g(arr, N, end, start, 0);
53+
}
54+
55+
public static int g(int[] arr, int N, int end, int i, int k) {
56+
if (i < 1) {
57+
return -1;
58+
}
59+
if (i > N) {
60+
return -1;
61+
}
62+
if (k > N - 1) {
63+
return -1;
64+
}
65+
if (i == end) {
66+
return k;
67+
}
68+
int left = i - arr[i - 1];
69+
int right = i + arr[i - 1];
70+
int ans = -1;
71+
int ans1 = g(arr, N, end, left, k + 1);
72+
int ans2 = g(arr, N, end, right, k + 1);
73+
if (ans1 != -1 && ans2 != -1) {
74+
ans = Math.min(ans1, ans2);
75+
} else if (ans1 != -1) {
76+
ans = ans1;
77+
} else if (ans2 != -1) {
78+
ans = ans2;
79+
}
80+
return ans;
81+
}
82+
983
public static int jumpMinTimes1(int N, int start, int end, int[] arr) {
1084
boolean[] map = new boolean[N + 1];
1185

@@ -174,15 +248,15 @@ public static void printArray(int[] arr) {
174248
public static void main(String[] args) {
175249
int maxN = 20;
176250
int maxV = 10;
177-
int testTimes = 200000;
251+
int testTimes = 200;
178252
System.out.println("test begin");
179253
for (int i = 0; i < testTimes; i++) {
180254
int[] arr = gerRandomArray(maxN, maxV);
181255
int N = arr.length;
182256
int start = (int) (Math.random() * N) + 1;
183257
int end = (int) (Math.random() * N) + 1;
184-
int ans1 = jumpMinTimes1(N, start, end, arr);
185-
int ans2 = jumpMinTimes2(N, start, end, arr);
258+
int ans1 = jump1(N, start, end, arr);
259+
int ans2 = jump2(N, start, end, arr);
186260
int ans3 = jumpMinTimes3(N, start, end, arr);
187261
if (ans1 != ans2 || ans2 != ans3) {
188262
printArray(arr);

src/topinterviewquestions/Problem_0046_Permutations.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,42 @@
11
package topinterviewquestions;
22

33
import java.util.ArrayList;
4+
import java.util.HashSet;
45
import java.util.List;
56

67
public class Problem_0046_Permutations {
78

9+
public static List<List<Integer>> onClass(int[] nums) {
10+
List<List<Integer>> ans = new ArrayList<>();
11+
HashSet<Integer> rest = new HashSet<>();
12+
for (int num : nums) {
13+
rest.add(num);
14+
}
15+
ArrayList<Integer> path = new ArrayList<>();
16+
f(rest, path, ans);
17+
return ans;
18+
}
19+
20+
// rest中有剩余数字,已经选过的数字不在rest中,选过的数字在path里
21+
public static void f(HashSet<Integer> rest, ArrayList<Integer> path, List<List<Integer>> ans) {
22+
if (rest.isEmpty()) {
23+
ans.add(path);
24+
} else {
25+
for (int num : rest) {
26+
ArrayList<Integer> curPath = new ArrayList<>(path);
27+
curPath.add(num);
28+
HashSet<Integer> clone = cloneExceptNum(rest, num);
29+
f(clone, curPath, ans);
30+
}
31+
}
32+
}
33+
34+
public static HashSet<Integer> cloneExceptNum(HashSet<Integer> rest, int num) {
35+
HashSet<Integer> clone = new HashSet<>(rest);
36+
clone.remove(num);
37+
return clone;
38+
}
39+
840
public static List<List<Integer>> permute(int[] nums) {
941
List<List<Integer>> ans = new ArrayList<>();
1042
process(nums, 0, ans);

src/topinterviewquestions/Problem_0055_JumpGame.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ public static boolean canJump(int[] nums) {
88
}
99
int max = nums[0];
1010
for (int i = 1; i < nums.length; i++) {
11+
// if (max >= nums.length - 1) {
12+
// return true;
13+
// }
1114
if (i > max) {
1215
return false;
1316
}

0 commit comments

Comments
 (0)