81. Search in Rotated Sorted Array II - Medium
阿新 • • 發佈:2018-12-04
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; } }