试题
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
代码
1、以数组最后一个数作为flag,进行区间更新。如果小于说明在左区间,此时需注意mid有可能刚好为最小值。如果大于,说明在右区间,正常更新即可
2、循环终止条件为left<right
3、用右边值作为flag的另一好处是能够直接处理从小到大的有序数组。
class Solution {
public int findMin(int[] nums) {
int left=0, right=nums.length-1;
while(left<right){
int mid = left + (right-left)/2;
if(nums[mid]<=nums[right]){
right = mid;
}else{
left = mid+1;
}
}
return nums[left];
}
}