81.搜索旋转排序数组 II

class Solution {
public:
    bool search(vector<int>& nums, int target) {
        int l = 0, r = nums.size() - 1;
        while (l <= r) {
            int mid = (l+r)/2;
            if (nums[mid] == target) {//找到目标值退出
                return true;
            }
            if (nums[l] == nums[mid]) {//关键处理:左端与中点相等。无法判断有序,左边界+1,
//你从哪边去掉重复,这里去掉了左边的重复,就必须优先信任另一边作为有序区间去判断
                ++l;
            } else if (nums[mid] <= nums[r]) {//右半部分有序
                if (target > nums[mid] && target <= nums[r]) {//在右半有序区间内
                    l = mid + 1;
                } else {
                    r = mid - 1;
                }
            } else {//左半部分有序
                if (target >= nums[l] && target < nums[mid]) {//在左半有序区间内
                    r = mid - 1;
                } else {
                    l = mid + 1;//在右半部分
                }
            }
        }
        return false;
    }
};
posted @ 2026-07-14 21:29  Acyclonepl  阅读(3)  评论(0)    收藏  举报