153 Find Minimum in Rotated Sort

2016-10-16  本文已影响0人  Shiyi001

Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e., <code>0 1 2 4 5 6 7</code> might become <code>4 5 6 7 0 1 2</code>).

Find the minimum element.

You may assume no duplicate exists in the array.


解题思路

这道题如果没有进行变换,是典型的二分思想。
然而进行了变换,还是二分思想23333333333333

在区间内,如果最左端值小于最右端,那么该序列一定是升序排序的,那么问题解决。

如果是形如“/ /”的两段上升序列,找到最中间的数。如果该数比最左侧的值大,那么该数仍可与最右端的数组成形如“/ /”的两段上升序列;如果比左侧小,则左侧与该数形成形如“/ /”的两段上升序列。即,该问题一定可以分解为规模更小且结构相同的子问题。

当出现只有两个数或者最左端小于最右端时,问题即被解决


代码

class Solution {
public:
    int findMin(vector<int>& nums) {
        int len = nums.size();
        return  find(nums, 0, len-1);
    }
    
    int find(vector<int>& nums, int l, int r){
        if (l+1 == r && nums[l] > nums[r]) return nums[r];
        if (nums[l] <= nums[r]) return nums[l];
        
        int mid = (l+r)>>1;
        if (nums[mid] > nums[l]) return find(nums, mid, r);
            else return find(nums, l, mid);
    }
};

PS 居然打败了100%的代码,好鸡冻啊好鸡冻~

上一篇下一篇

猜你喜欢

热点阅读