Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7
might become 4 5 6 7 0 1 2
).
Find the minimum element.
You may assume no duplicate exists in the array.
二分查找碰到数组,start和end除了选择-1,length,也可以选择0,length-1防止指针越界,再额外判断0,length-1的情况。
这道题可以选择nums[start]和nums[mid]比较,如果nums[start]<nums[mid],start = mid,如果>=,end = mid,相当于锁定end是要找的最小的数。
代码如下:
public class Solution {
public int findMin(int[] nums) {
int start = 0, end = nums.length - 1;
if (nums[start] < nums[end]) {
return nums[start];
}
while (start + 1 < end) {
int mid = start + (end - start) / 2;
if (nums[start] < nums[mid]) {
start = mid;
} else {
end = mid;
}
}
return nums[end];
}
}