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.
Example 1: Input: [3,4,5,1,2] Output: 1 Example 2: Input: [4,5,6,7,0,1,2] Output: 0
class Solution {
public int findMin(int[] nums) {
int start = 0;
int end = nums.length - 1;
if(nums[start] < nums[end]) return nums[start]; //排除一直增大的情况
while(start + 1 < end) {
int middle = start + (end - start) / 2;
if(nums[middle] < nums[0]) end = middle;
else if(nums[middle] > nums[0]) start = middle;
}
return nums[end];
}
}
若数字有重复,那最坏情况是全部1,然后有一个0,时间复杂度必然是o(n)。就写个普通的for循环好了