LeetCode 154. Find Minimum in Rotated Sorted Array II
Suppose a sorted array 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.
The array may contain duplicates.
思路:由于右半部份全部比左半部分都小, 所以用二分。 mid比left大往left右移动, mid比right小,right往左移。
关键是重复的时候咋办。 其实重复只会在两端出现,我的处理办法在初始的时候就把这种情况解决掉。 这样在极端情况下复杂度会比较差。 参考了别人二分写法,算了下复杂度,在极端情况下也是一样的。
AC代码:
class Solution { public: int findMin(vector<int>& nums) { int n = nums.size(); int left = 0, right = n-1; while(right>0 && nums[right]==nums[left]) right--; if(right == 0) return nums[0]; if(nums[right]>nums[left]) return nums[left]; while(left+1 < right) { int mid = (left+right)>>1; if(nums[left] <= nums[mid]) { left = mid; } else right = mid; } return nums[(left+1)%n]; } };

浙公网安备 33010602011771号