leetcode Daily Challenge on November 20th, 2020.
Difficulty : Medium
Related Topics : Array、BinarySearch
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 returnfalse
.Input: nums = [2,5,6,0,0,1,2], target = 0 Output: true
Input: nums = [2,5,6,0,0,1,2], target = 3 Output: false
- 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?
- mine
- Java
- ``
- ``
- Java
- the most votes
Runtime: 0 ms, faster than 100.00%, Memory Usage: 38.9 MB, less than 38.27% of Java online submissions
public boolean search(int[] nums, int target) { if (nums == null || nums.length == 0) return false; int start = 0; int end = nums.length - 1; while (start <= end) { int mid = (start + end) >>> 1; if (nums[mid] == target) return true; if (nums[start] == nums[mid]) { start++; continue; } //first part is orderly if (nums[start] < nums[mid]) { if (nums[mid] > target && nums[start] <= target) { //target in the first part end = mid - 1; } else { start = mid + 1; } } else { //last part is orderly if (nums[mid] < target && nums[end] >= target) { //target in the end part start = mid + 1; } else { end = mid - 1; } } } return false; }