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?
class Solution { public boolean search(int[] nums, int target) { // sanity check if(nums == null || nums.length == 0) return false; int left = 0; int right = nums.length - 1; while(left <= right){ // <= int mid = left + (right - left) / 2; if(nums[mid] == target) return true; // right half is sorted if(nums[mid] < nums[right]){ // if target is in between if(target > nums[mid] && target <= nums[right]){ // <= left = mid + 1; }else{ // else right = mid - 1; } }else if(nums[mid] > nums[right]){ // left half is sorted if(target >= nums[left] && target < nums[mid]){ // >= // target is in between right = mid - 1; }else{ left = mid + 1; } }else{ // nums[mid] == nums[right] right = right - 1; } } return false; } }