Follow up for "Search in Rotated Sorted Array":
What if duplicates are allowed?
Would this affect the run-time complexity? How and why?
Write a function to determine if a given target is in the array.
思路:
相比于题目“Search in Rotated Sorted Array",该题目中允许重复数值的出现。举个例子array:[3, 1, 1], target:3. 如果按照原题的方法查找target值,详细执行具体步骤:
mid= 1:nums[mid]<nums[end]不成立,进入else,此时按照原题目的分析应该满足数组左边一定是有序的,但是由于重复元素的存在,左边不满足一定有序的条件。所以会出错。所以要对nums[mid]==nums[end]相等的情况进行判断。
代码实现:
class Solution {
public:
bool search(vector<int>& nums, int target) {
if(nums.size() < 1) return false;
int beg = 0, end = nums.size() - 1;
while(beg <= end)
{
int mid = (beg + end) / 2;
if(target == nums[mid])
return true;
if(nums[mid] < nums[end])
{
if(target > nums[mid] && target <= nums[end])
beg = mid + 1;
else end = mid - 1;
}
else if(nums[mid] > nums[end])
{
if(target < nums[mid] && target >= nums[beg])
end = mid - 1;
else beg = mid + 1;
}
else --end;
}
return false;
}
};