题目描述:
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.
解题思路:
若将本题给的数组从中间切割会有三种可能的情况:
1) 最小数在左边的子数组,那么可知nums[right]>nums[mid];
2) 最小数在右边的子数组,那么可知nums[mid]>nums[left]>nums[0]>nums[end]>nums[right]
3) 最小数在中间,可知nums[right]>nums[min];
因此整理可得:
1) nums[right]>nums[min],最小数在区间(left, mid]
2) 除此之外,最小数在区间(mid, right)
用循环找中心点即可找到最后答案
代码:
1 class Solution { 2 public: 3 int findMin(vector<int>& nums) { 4 int left = 0, right = nums.size()-1, mid; 5 while(left < right){ 6 mid = (left+right)/2; 7 if(nums[mid]<nums[right]) //第一种情况 8 right = mid; 9 else //第二种情况 10 left = mid+1; 11 } 12 return nums[left]; 13 } 14 };