要求:跟33题区别是会有重复的
思路:二分
class Solution {
public:
bool search(vector<int>& nums, int target) {
int left = 0;
int right = nums.size() - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] == target) {
return true;
}
if (nums[left] == nums[mid]) {
left++; // 跳到下个left
continue;
}
if (nums[left] <= nums[mid]) { // 左侧有序,这里可不用=,因为上面判断了
if (nums[left] <= target && target < nums[mid]) { // 是否在左侧
right = mid - 1;
} else { // 否则在右边
left = mid + 1;
}
} else { // 右侧有序
if (nums[mid] < target && target <= nums[right]) { // 是否在右侧
left = mid + 1;
} else { // 否则在在左边
right = mid - 1;
}
}
}
return false;
}
};