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?
binary search
同33. Search in Rotated Sorted Array https://www.cnblogs.com/fatttcat/p/10063254.html
由于可以有重复元素,遇到 [1, 1, 3, 1] 情况无法判断,需要增加一种情况:当nums[l] == nums[m]时,当前元素重复,l向右移动一位
时间:O(logN) , worst case O(N),空间:O(1)
class Solution { public boolean search(int[] nums, int target) { if(nums == null || nums.length == 0) return false; int l = 0, r = nums.length - 1; while(l + 1 < r) { int m = l + (r - l) / 2; if(nums[m] == target) return true; if(nums[l] < nums[m]) { if(nums[l] <= target && target <= nums[m]) r = m; else l = m; } else if(nums[l] > nums[m]) { if(nums[m] <= target && target <= nums[r]) l = m; else r = m; } else l++; } if(nums[l] == target) return true; if(nums[r] == target) return true; return false; } }