Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., [0,0,1,2,2,5,6]
might become [2,5,6,0,0,1,2]
).
You are given a target value to search. If found in the array return true
, otherwise return false
.
Example 1:
Input: nums = [2,5,6,0,0,1,2]
, target = 0
Output: true
Example 2:
Input: nums = [2,5,6,0,0,1,2]
, target = 3
Output: false
Follow up:
- This is a follow up problem to Search in Rotated Sorted Array, where
nums
may contain duplicates. - Would this affect the run-time complexity? How and why?
bool search(int* nums, int numsSize, int target) {
if(numsSize==0)
return false;
if(numsSize==1)
{
if(nums[0]==target)
return true;
else
return false;
}
int i,j,k,l=0,left,right;
for(i=1;i<numsSize;i++)
{
if(nums[i]<nums[i-1])
{
l=1;
break;
}
}
if(l==0)
{
left=0,right=numsSize-1;
while(left<=right)
{
int mid=left+(right-left)/2;
if(nums[mid]==target)
return true;
else if(nums[mid]>target)
right=mid-1;
else
left=mid+1;
}
}
else
{
if(target==nums[i-1])
return true;
else if(target>nums[i-1])
{
return false;
}
else
{
if(nums[0]==target)
return true;
else if(target>nums[0])
{
left=1,right=i-2;
while(left<=right)
{
int mid=left+(right-left)/2;
if(nums[mid]==target)
return true;
else if(nums[mid]>target)
right=mid-1;
else
left=mid+1;
}
}
else
{
if(nums[i]==target)
return true;
else
{
left=i+1,right=numsSize-1;
while(left<=right)
{
int mid=left+(right-left)/2;
if(nums[mid]==target)
return true;
else if(nums[mid]>target)
right=mid-1;
else
left=mid+1;
}
}
}
}
}
return false;
}