Follow up for “Search in Rotated Sorted Array“: what if duplicates are allowed? Write a function to determine if a given target is in the array.
Java Solution
public boolean search(int[] nums, int target) { int left=0; int right=nums.length-1; while(left<=right){ int mid = (left+right)/2; if(nums[mid]==target) return true; 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 false; } |
why do we need
else
{
left++
}
in case of sorted?? but in this case WE WILL MISS LEFT MOST ELEMENT , cause middle will never be 0.
better check before middle left/right equal target!!!