题目解析
153. 寻找旋转排序数组中的最小值
我们可以发现旋转后的数组是有这样一个顺序特征:
1.要么是旋转长度次,刚好还是原来的数组
2.要么一定存在一段一段的升序区间,再其中一段的升序区间中就存在最小值
算法讲解
但是我们这一次使用二分算法不能够让nums[mid] 和nums[mid+1]位置上的两个数字进行比较,它们是比较不出来的。
所以我们需要确定一个值,以此来判断区间的状态
class Solution {
public:int findMin(vector<int>& nums) {int left = 0, right = nums.size()-1;int target = nums[right];while(left < right){int mid = left + (right - left) / 2;//说明肯定经过旋转 那么最小的数字就需要在mid 的右边区间寻找if(nums[mid] > target)left = mid + 1;else right = mid;}return nums[left];}
};
我们使用数组的最后一个值进行判断区间状态,因为旋转后的数组一定是处于一段段升序的组合,根据最后一个值就可以判断出来当前这一段的指针的移动