Skip to content

Commit f159bcb

Browse files
committed
20190704
1 parent 34e359c commit f159bcb

File tree

4 files changed

+119
-2
lines changed

4 files changed

+119
-2
lines changed

code/lc153.java

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package code;
2+
/*
3+
* 153. Find Minimum in Rotated Sorted Array
4+
* 题意:反转数组找最小值
5+
* 难度:Medium
6+
* 分类:Array, Binary Search
7+
* 思路:
8+
* Tips:边界条件想清楚
9+
*/
10+
public class lc153 {
11+
public int findMin(int[] nums) {
12+
int left = 0;
13+
int right = nums.length-1;
14+
while(left<right){
15+
int mid = (left+right)/2;
16+
if(nums[left]<nums[mid]){ //左边有序
17+
if(nums[left]<nums[right]){ //在左边找
18+
right = mid-1;
19+
}else{
20+
left = mid;
21+
}
22+
}else{ //右边有序
23+
if(nums[right]<nums[mid]){ //边界条件想清楚
24+
left = mid+1;
25+
}else{
26+
right = mid;
27+
}
28+
}
29+
}
30+
return nums[left];
31+
}
32+
}

code/lc215.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
* 分类:Divide and Conquer, Heap
77
* 思路:快排的思想
88
* Tips:经典的题目,记一下代码格式,方便快速写出
9+
* 两个点 1.降序排序 2.注意等号。 相比快排,省略了首行判断返回 和 交换
10+
* lc912
911
*/
1012
public class lc215 {
1113
public static void main(String[] args) {
@@ -21,10 +23,10 @@ public static int quickSort(int[] nums, int left, int right, int k){
2123
int origin_r = right;
2224
int cur = nums[left];
2325
while(left<right) {
24-
while (left<right && nums[right] < cur)
26+
while (left<right && nums[right] < cur) //降序排序,方便处理
2527
right--;
2628
nums[left] = nums[right];
27-
while (left<right && nums[left] >= cur)
29+
while (left<right && nums[left] >= cur) //注意要加个=号,上个while加也行,防止重复数字死循环
2830
left++;
2931
nums[right] = nums[left];
3032
}

code/lc912.java

+81
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package code;
2+
/*
3+
* 912. Sort an Array
4+
* 题意:数组排序
5+
* 难度:Medium
6+
* 分类:
7+
* 思路:
8+
* Tips:注意和lc215区别
9+
* lc215
10+
*/
11+
public class lc912 {
12+
public static void main(String[] args) {
13+
int[] arr = sortArray2(new int[]{5,2,3,1});
14+
for(int i: arr){
15+
System.out.println(i);
16+
}
17+
}
18+
19+
// 快排
20+
public int[] sortArray(int[] nums) {
21+
quickSort(nums, 0, nums.length-1);
22+
return nums;
23+
}
24+
public void quickSort(int[] nums, int left, int right){
25+
if(left>=right) return; //注意返回
26+
int l = left;
27+
int r = right;
28+
int pivot = nums[left];
29+
while(left<right){
30+
while(left<right && nums[right]>=pivot) right--;
31+
int temp = nums[right]; nums[right] = nums[left]; nums[left]=temp; //交换
32+
while(left<right && nums[left]<pivot ) left++;
33+
temp = nums[right]; nums[right] = nums[left]; nums[left]=temp;
34+
}
35+
nums[left] = pivot;
36+
quickSort(nums, left+1, r);
37+
quickSort(nums, l, right-1);
38+
}
39+
40+
// 归并
41+
public static int[] sortArray2(int[] nums) {
42+
mergeSort(nums, 0, nums.length-1);
43+
return nums;
44+
}
45+
public static void mergeSort(int[] nums, int left, int right){
46+
if(left<right) {
47+
int mid = (left+right)/2;
48+
mergeSort(nums, left, mid);
49+
mergeSort(nums, mid+1, right);
50+
merge(nums, left, mid, right);
51+
}
52+
}
53+
public static void merge(int[] nums, int left, int mid, int right){
54+
int[] temp = nums.clone(); //记住这个方法
55+
int cur = left;
56+
int pos1 = left;
57+
int pos2 = mid+1;
58+
while(pos1<=mid && pos2<=right){
59+
if(temp[pos1]<temp[pos2]) { //注意是temp 复制后的
60+
nums[cur] = temp[pos1];
61+
pos1++;
62+
cur++;
63+
}
64+
else {
65+
nums[cur] = temp[pos2];
66+
pos2++;
67+
cur++;
68+
}
69+
}
70+
while(pos1<=mid){
71+
nums[cur] = temp[pos1];
72+
pos1++;
73+
cur++;
74+
}
75+
while(pos2<=right){
76+
nums[cur] = temp[pos2];
77+
pos2++;
78+
cur++;
79+
}
80+
}
81+
}

readme.md

+2
Original file line numberDiff line numberDiff line change
@@ -236,3 +236,5 @@ LeetCode 指南
236236
| 1026 [Java](./code/lc1026.java)
237237
| 1027 [Java](./code/lc1027.java)
238238
| 1028 [Java](./code/lc1028.java)
239+
| 1093 [Java](./code/lc1093.java)
240+
| 1094 [Java](./code/lc1094.java)

0 commit comments

Comments
 (0)