153 Find Minimum in Rotated Sorted Array

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%的代碼,好雞凍啊好雞凍~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容