154. 寻找旋转排序数组中的最小值 II

题目链接:154. 寻找旋转排序数组中的最小值 II - 力扣(LeetCode)

 

 

 

 

 

 

 

 

 

 

 

 

 

解析:

81. 搜索旋转排序数组 II - 力扣(LeetCode)  感觉代码有点乱,换种方法

当mid与0相等的时候可以考虑,直接过滤0,start++,这样start ~ n的下标区间内还是所有元素都有

但这样会有一个问题,就是最小值在start,这样就没办法找到target(大于0且右边比当前的小),反转下找最小就好了

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

 

posted @ 2025-11-06 22:00  WTSRUVF  阅读(4)  评论(0)    收藏  举报