1. 程式人生 > >81. Search in Rotated Sorted Array II - Medium

81. Search in Rotated Sorted Array II - Medium

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; } }