回転ソート配列で最小値I / IIを見つける

タイトル:https : //leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array/

class Solution {
public:
    int findMin(vector<int>& nums) {
        /*假设按照升序排序的数组在预先未知的某个点
        *上进行了旋转请找出其中最小的元素。
        *假设数组中不存在重复元素
        */
        int n = nums.size();
        int l = 0,r = n-1;
        int mn = nums[0];
        while(l < r) {
            int m = (l+r)/2;
            if(nums[m] < nums[r]) {
                mn = min(mn,nums[m]);
                r = m-1;
            }else {
                l = m+1;
            }
        }
        mn = min(mn,nums[l]);
        return mn;
    }
};

题目2:https ://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii/

class Solution {
public:
    int findMin(vector<int>& nums) {
        /*假设按照升序排序的数组在预先未知的某个点
        *上进行了旋转请找出其中最小的元素。
        *数组中可能存在重复的元素
        */
        int n = nums.size();
        int l = 0,r = n-1;
        int mn = nums[0];
        while(l < r) {
            int m = (l+r)/2;
            while(m < r && nums[m] == nums[r]) r--;
            if(nums[m] <= nums[r]) {
                mn = min(mn,nums[m]);
                r = m-1;
            }else {
                l = m+1;
            }
        }
        mn = min(mn,nums[l]);
        return mn;
    }
};
公開された152元の記事 ウォンの賞賛2 ビュー6454

おすすめ

転載: blog.csdn.net/weixin_43918473/article/details/104671830