leetcode No153. Find Minimum in Rotated Sorted Array

来源:互联网 发布:重庆高档小区知乎 编辑:程序博客网 时间:2024/05/18 20:09

Question

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.

Algorithm

二分搜索的变形(没有重复元素的前提)
1.如果nums[left] < nums[right]说明数组有序,最小值为nums[left]
2.如果nums[left] >= nums[right]说明数组无序
(1)nums[left] > nums[mid]说明前半部无序,最小值在下标(left,mid]部分
(2)nums[right] < nums[mid]说明后半部无序,最小值在下标(mid,right]部分

Accepted Code

class Solution {public:    int findMin(vector<int>& nums) {        int left=0,right=nums.size()-1,mid=0;        while(left<right){            if(nums[left]<nums[right])                return nums[left];            mid=(right-left)/2+left;            if(nums[mid]<nums[left])                right=mid;            else                left=mid+1;        }        return nums[left];    }};