您的位置:首页 > 其它

【Leet Code】81. Search in Rotated Sorted Array II---Medium

2015-11-17 10:29 363 查看
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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: