您的位置:首页 > 其它

81. Search in Rotated Sorted Array II

2016-05-06 17:54 405 查看
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.

这个题目是在https://leetcode.com/problems/search-in-rotated-sorted-array/

的基础上,添加了允许有相同的元素这个条件。

那么就会有一种特殊情况,比如1,1,1,1,1,3,3 旋转之后为1,3,3,1,1,1,1.

当中间的元素等于第一个元素时,就把l++,因为target!=nums[mid]的

而nums[mid]=nums[l],可以推出target!=nums[l]。

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;
else if(nums[mid]>nums[l]){//递增的序列在左边
if(target>=nums[l]&&target<nums[mid])
r=mid-1;
else
l=mid+1;
}else if(nums[mid]<nums[l]){
if(target>nums[mid]&&target<=nums[r])
l=mid+1;
else
r=mid-1;
}else if(nums[mid]==nums[l]){
l++;
}
}
return false;
}
};


而 Search in Rotated Sorted Array

Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

You are given a target value to search. If found in the array return its index, otherwise return -1.

这个题目 只需要把返回的参数改一下就可以AC了。

class Solution {
public:
int 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 mid;
else if(nums[mid]>nums[l]){
if(target>=nums[l]&&target<nums[mid])
r=mid-1;
else
l=mid+1;
}else if(nums[mid]<nums[l]){
if(target>nums[mid]&&target<=nums[r])
l=mid+1;
else
r=mid-1;
}else if(nums[mid]==nums[l]){
l++;
}
}
return -1;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: