Skip to content

Commit 984071b

Browse files
author
zhangruihao.zhang
committed
week_02
1 parent 2863ba0 commit 984071b

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed

Week_01/id_108/LeetCode_153_108.java

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
/**
2+
* @author zhangruihao.zhang
3+
* @version v1.0.0
4+
* @since 2019/04/24
5+
*/
6+
public class LeetCode_153_108 {
7+
8+
class Solution1 {
9+
public int findMin(int[] nums) {
10+
if(nums.length == 1){
11+
return nums[0];
12+
}
13+
if(nums.length == 2){
14+
return nums[0] > nums[1] ? nums[1] : nums[0];
15+
}
16+
if(nums[0] < nums[nums.length-1]){
17+
return nums[0];
18+
}
19+
int min = 0;
20+
int high = nums.length - 1;
21+
int mid = 0;
22+
while(min <= high){
23+
//针对1、2、3这种情况
24+
if(min == high){
25+
return nums[min];
26+
}
27+
mid = min + ((high-min) >> 1);
28+
if(nums[mid] > nums[high]){
29+
if(nums[mid+1] < nums[mid]){
30+
return nums[mid+1];
31+
}
32+
min = mid + 1;
33+
continue;
34+
}
35+
if(nums[mid] < nums[min]){
36+
if(nums[mid-1] > nums[mid]){
37+
return nums[mid];
38+
}
39+
high = mid - 1;
40+
}
41+
}
42+
return -1;
43+
}
44+
45+
//二分查找
46+
//分为两种情况
47+
//mid比最后一个元素大,判断它右边的值是否小于它,如果小于的话就返回右边的值,否则的话,min取mid+1
48+
//mid比第一个元素小,判断它左边的值是否比它大,如果大的话,直接返回它自己,否则的话high取mid-1
49+
}
50+
51+
class Solution2 {
52+
public int findMin(int[] nums) {
53+
if(nums.length == 1){
54+
return nums[0];
55+
}
56+
int min = 0;
57+
int high = nums.length - 1;
58+
int mid = 0;
59+
while(min < high){
60+
mid = min + ((high-min) >> 1);
61+
if(nums[mid] > nums[high]){
62+
min = mid + 1;
63+
} else {
64+
high = mid;
65+
}
66+
}
67+
return nums[min];
68+
}
69+
70+
//二分查找
71+
//分为两种情况
72+
//mid比最后一个元素大,判断它右边的值是否小于它,如果小于的话就返回右边的值,否则的话,min取mid+1
73+
//mid比第一个元素小,判断它左边的值是否比它大,如果大的话,直接返回它自己,否则的话high取mid-1
74+
75+
76+
}
77+
}

0 commit comments

Comments
 (0)