1. 题目
Search in Rotated Sorted Array II
在旋转有序数组中查找特定值
数组中有重复的数,查找特定值,若存在,返回true,若不存在,返回false
如[10,12,12,1,2,6,8,10] 10 返回true
[10,12,12,1,2,6,8,10] 0 返回false
2. 分析
类似于 Search in Rotated Sorted Array
但注意不是返回下标而是 true or false
数组中存在重复的数,则当nums[start]==nums[mid]
无法确定数组的递增序列,需要进一步查找
3. 代码
class Solution {
public:
bool search(vector<int>& nums, int target) {
const int len = nums.size();
if(len <= 0)
return 0;
int left = 0;
int right = len - 1;
while(left <= right)
{
int mid = left + ((right - left) >> 1);
if(target == nums[mid])
return 1;
if(nums[left] < nums[mid])
{
if(nums[left] <= target && target < nums[mid])
right = mid - 1;
else
left = mid + 1;
}
else if(nums[left] > nums[mid])
{
if(nums[mid] < target && target <= nums[right])
left = mid + 1;
else
right = mid - 1;
}
else
++left;
}
return 0;
}
};