美文网首页
153 Find Minimum in Rotated Sort

153 Find Minimum in Rotated Sort

作者: Shiyi001 | 来源:发表于2016-10-16 10:53 被阅读0次

    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%的代码,好鸡冻啊好鸡冻~

    相关文章

      网友评论

          本文标题:153 Find Minimum in Rotated Sort

          本文链接:https://www.haomeiwen.com/subject/hsioyttx.html