find minimum in rotated sorted array


Find Minimum in Rotated Sorted Array

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public int (int[] num) {
int begin = 0, end = num.length - 1;
while (begin + 1 < end) {
int mid = begin + (end - begin) / 2;
int val = num[mid];
if (val < num[end]) {

end = mid;
} else {
// the right part is not sorted
begin = mid;
}
}
if (num[begin] < num[end])
return num[begin];
else
return num[end];
}

Find Minimum in Rotated Sorted Array II
⚠️注意如果中间的数值等于尾部的数值,我们只能右边减减。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public int (int[] nums) {
if (nums == null || nums.length == 0)
return 0;
int begin = 0, end = nums.length - 1;
while (begin + 1 < end) {
int mid = begin + (end - begin) / 2;
int val = nums[mid];
if (val < nums[end]) {
// right part is sorted
end = mid;
} else if (val > nums[end]) {
begin = mid;
} else
// if val == nums[end]
--end;
}
if (nums[begin] < nums[end])
return nums[begin];
return nums[end];