Skip to content

Commit fbea0d2

Browse files
committed
add class 08
1 parent d051cef commit fbea0d2

File tree

5 files changed

+318
-68
lines changed

5 files changed

+318
-68
lines changed
Lines changed: 0 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package class07;
22

3-
import java.util.ArrayList;
43
import java.util.LinkedList;
54
import java.util.List;
65
import java.util.Queue;
7-
import java.util.Stack;
86

97
// 测试链接:https://leetcode.com/problems/binary-tree-level-order-traversal-ii
108
public class Code01_BinaryTreeLevelOrderTraversalII {
@@ -44,67 +42,4 @@ public List<List<Integer>> levelOrderBottom(TreeNode root) {
4442
return ans;
4543
}
4644

47-
public static void main(String[] args) {
48-
int testTime = 1000;
49-
long start;
50-
long end;
51-
52-
System.out.println("hello!");
53-
// ArrayList<Integer> arr1 = new ArrayList<>();
54-
// start = System.currentTimeMillis();
55-
// for (int i = 0; i < testTime; i++) {
56-
// arr1.add(0, i);
57-
// }
58-
// end = System.currentTimeMillis();
59-
// System.out.println(end - start);
60-
//
61-
// LinkedList<Integer> arr2 = new LinkedList<>();
62-
// start = System.currentTimeMillis();
63-
// for (int i = 0; i < testTime; i++) {
64-
// arr2.add(0, i);
65-
// }
66-
// end = System.currentTimeMillis();
67-
// System.out.println(end - start);
68-
// System.out.println("=====");
69-
70-
testTime = 10000000;
71-
Stack<Integer> stack1 = new Stack<>();
72-
start = System.currentTimeMillis();
73-
for (int i = 0; i < testTime; i++) {
74-
stack1.add(i);
75-
}
76-
while (!stack1.isEmpty()) {
77-
stack1.pop();
78-
}
79-
end = System.currentTimeMillis();
80-
System.out.println(end - start);
81-
82-
int[] stack2 = new int[testTime];
83-
int index = 0;
84-
start = System.currentTimeMillis();
85-
for (int i = 0; i < testTime; i++) {
86-
stack2[index++] = i;
87-
}
88-
while (index != 0) {
89-
int a = stack2[--index];
90-
}
91-
end = System.currentTimeMillis();
92-
System.out.println(end - start);
93-
94-
// while (!s.isEmpty()) {
95-
// System.out.println(s.pollLast());
96-
// }
97-
//
98-
// int[] sta = new int[100];
99-
// int index = 0;
100-
// sta[index++] = 1;
101-
// sta[index++] = 2;
102-
// sta[index++] = 3;
103-
//
104-
// System.out.println(sta[--index]);
105-
// System.out.println(sta[--index]);
106-
// System.out.println(sta[--index]);
107-
108-
}
109-
11045
}

src/class07/Code04_PathSumII.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package class07;
22

33
import java.util.ArrayList;
4-
import java.util.LinkedList;
54
import java.util.List;
65

76
public class Code04_PathSumII {
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
package class07;
1+
package class08;
22

3-
public class Code05_GetMax {
3+
public class Code01_GetMax {
44

55
public static int flip(int n) {
66
return n ^ 1;

src/class08/Code02_MergeSort.java

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
package class08;
2+
3+
public class Code02_MergeSort {
4+
5+
// 递归方法实现
6+
public static void mergeSort1(int[] arr) {
7+
if (arr == null || arr.length < 2) {
8+
return;
9+
}
10+
process(arr, 0, arr.length - 1);
11+
}
12+
13+
public static void process(int[] arr, int L, int R) {
14+
if (L == R) {
15+
return;
16+
}
17+
int mid = L + ((R - L) >> 1);
18+
process(arr, L, mid);
19+
process(arr, mid + 1, R);
20+
merge(arr, L, mid, R);
21+
}
22+
23+
public static void merge(int[] arr, int L, int M, int R) {
24+
int[] help = new int[R - L + 1];
25+
int i = 0;
26+
int p1 = L;
27+
int p2 = M + 1;
28+
while (p1 <= M && p2 <= R) {
29+
help[i++] = arr[p1] <= arr[p2] ? arr[p1++] : arr[p2++];
30+
}
31+
while (p1 <= M) {
32+
help[i++] = arr[p1++];
33+
}
34+
while (p2 <= R) {
35+
help[i++] = arr[p2++];
36+
}
37+
for (i = 0; i < help.length; i++) {
38+
arr[L + i] = help[i];
39+
}
40+
}
41+
42+
// 非递归方法实现
43+
public static void mergeSort2(int[] arr) {
44+
if (arr == null || arr.length < 2) {
45+
return;
46+
}
47+
int N = arr.length;
48+
int mergeSize = 1;
49+
while (mergeSize < N) {
50+
int L = 0;
51+
while (L < N) {
52+
if (mergeSize >= N - L) {
53+
break;
54+
}
55+
int M = L + mergeSize - 1;
56+
int R = M + Math.min(mergeSize, N - M - 1);
57+
merge(arr, L, M, R);
58+
L = R + 1;
59+
}
60+
if (mergeSize > N / 2) {
61+
break;
62+
}
63+
mergeSize <<= 1;
64+
}
65+
}
66+
67+
// for test
68+
public static int[] generateRandomArray(int maxSize, int maxValue) {
69+
int[] arr = new int[(int) ((maxSize + 1) * Math.random())];
70+
for (int i = 0; i < arr.length; i++) {
71+
arr[i] = (int) ((maxValue + 1) * Math.random()) - (int) (maxValue * Math.random());
72+
}
73+
return arr;
74+
}
75+
76+
// for test
77+
public static int[] copyArray(int[] arr) {
78+
if (arr == null) {
79+
return null;
80+
}
81+
int[] res = new int[arr.length];
82+
for (int i = 0; i < arr.length; i++) {
83+
res[i] = arr[i];
84+
}
85+
return res;
86+
}
87+
88+
// for test
89+
public static boolean isEqual(int[] arr1, int[] arr2) {
90+
if ((arr1 == null && arr2 != null) || (arr1 != null && arr2 == null)) {
91+
return false;
92+
}
93+
if (arr1 == null && arr2 == null) {
94+
return true;
95+
}
96+
if (arr1.length != arr2.length) {
97+
return false;
98+
}
99+
for (int i = 0; i < arr1.length; i++) {
100+
if (arr1[i] != arr2[i]) {
101+
return false;
102+
}
103+
}
104+
return true;
105+
}
106+
107+
// for test
108+
public static void printArray(int[] arr) {
109+
if (arr == null) {
110+
return;
111+
}
112+
for (int i = 0; i < arr.length; i++) {
113+
System.out.print(arr[i] + " ");
114+
}
115+
System.out.println();
116+
}
117+
118+
// for test
119+
public static void main(String[] args) {
120+
int testTime = 500000;
121+
int maxSize = 100;
122+
int maxValue = 100;
123+
System.out.println("测试开始");
124+
for (int i = 0; i < testTime; i++) {
125+
int[] arr1 = generateRandomArray(maxSize, maxValue);
126+
int[] arr2 = copyArray(arr1);
127+
mergeSort1(arr1);
128+
mergeSort2(arr2);
129+
if (!isEqual(arr1, arr2)) {
130+
System.out.println("出错了!");
131+
printArray(arr1);
132+
printArray(arr2);
133+
break;
134+
}
135+
}
136+
System.out.println("测试结束");
137+
}
138+
139+
}

0 commit comments

Comments
 (0)