153. Find Minimum in Rotated Sorted Array

思路:
这种旋转数组的题,首先要确定一个旋转点。可以用二分法来寻找。
因为有特例,当旋转n次时,数组就还原了,这就不满足二分法的 二段性这支博客解释过,所以我们要特别把这种情况单独考虑。然后其余的情况都可以用二分法找到旋转点,根据自己寻找的旋转点的细节来判断时right还是位与right+1的位置。

只要不是旋转到还原的程度,那么就一定有nums[n-1]<nums[0],所以只要不满足这个条件就直接返回nums[0]。否则就满足二段性。
直接看代码:

class Solution {
public:
    int findMin(vector<int>& nums) {
         int n=nums.size();
         int left=0,right=n-1;
         if (nums[right]>nums[left]) return nums[left];
         while(left<right){   //如果不确定这二分法的细节,是谁=mid+1,可以用题目例子推导一下
             int mid=(left+right)/2;
             if(nums[mid]>=nums[0]) left=mid+1;
             else right=mid;
         }
        return nums[right];
    }
};
posted @ 2021-04-08 17:01  Mrsdwang  阅读(24)  评论(0编辑  收藏  举报