思路: same as 153,然后还借鉴了88思想。其实33,81,153,154这四题思想都是一样的,都是变种binary search。这题会有duplicates,所以如果mid == left,说明有duplicates,那么left++。这题唯一的难点就在这儿了。下面展示代码:
class Solution {
public int findMin(int[] nums) {
int left = 0, right = nums.length - 1;
while(left <= right){
int mid = left + (right - left) / 2;
// array length quals 1 case
if(left == right) return nums[left];
// array unrotated case
if(nums[left] < nums[right]) return nums[left];
// duplicate case
if(nums[mid] == nums[left]) {left++;continue;}
// two base cases
if(mid < nums.length - 1 && nums[mid] > nums[mid + 1]) return nums[mid + 1];
if(mid > 0 && nums[mid - 1] > nums[mid]) return nums[mid];
if(nums[mid] >= nums[left]){ // left sorted, find in right
left = mid + 1;
}else{ // right sorted, find in left
right = mid;
}
}
return 100;
}
}
总结:无