LC.33. Search in Rotated Sorted Array

Posted davidnyc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LC.33. Search in Rotated Sorted Array相关的知识,希望对你有一定的参考价值。

 

https://leetcode.com/problems/search-in-rotated-sorted-array/description/
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.

time: o(logn) space: o(1)

Find Minimum in Rotated Sorted Array类似。因为rotate, 所以不能直接用Binary Search, 需要进行 二次判定。

case 1: nums[mid] == target, return mid.

case 2: nums[mid] < nums[r]. 此时说明 右侧是正常升序,没有rotation, 若是这种情况下 target > nums[mid] && target <= nums[r] 就在右侧查找,其他情况左侧查找。

case 3: nums[mid] > nums[r]. 此时说明 左侧是正常升序,没有rotation, 若是这种情况下 target < nums[mid] && target >= nums[l] 就在左侧查找,其他情况右侧查找

note here since there is no duplicate and the left + 1 = mid will exit, there wouldnt be a case that the nums[left]= nums[mid] or nums[mid] == num[right]
make sure also checks the LC.81

 1 public int search(int[] nums, int target) {
 2         if (nums == null || nums.length ==0 ) return -1 ;
 3         int left = 0, right = nums.length -1 ;
 4         while(left + 1 < right){
 5             int mid = left + (right-left)/2;
 6             if (nums[mid] == target) return mid ;
 7             //break into two parts: note, there is no duplicate
 8             //first half
 9             if (nums[left]< nums[mid] ){
10                 if (target<=nums[mid] && nums[left] <=target){
11                     right = mid ;
12                 }else {
13                     left = mid ;
14                 }
15             }
16             //second half:注意判断顺序进行改变
17             else if (nums[mid] < nums[right]){
18                 if (nums[mid]<=target && target <= nums[right]){
19                     left = mid ;
20                 }else {
21                     right = mid;
22                 }
23             }
24         }
25         //post processing for the left and right
26         if (nums[left] == target){
27             return left ;
28         }
29         if(nums[right] == target){
30             return right;
31         }
32         return -1 ;
33     }

 

 

 

 

 

 

以上是关于LC.33. Search in Rotated Sorted Array的主要内容,如果未能解决你的问题,请参考以下文章

Search in Rotated Sorted Array

Search in Rotated Sorted Array

33. Search in Rotated Sorted Array

33. Search in Rotated Sorted Array

33. Search in Rotated Sorted Array *HARD*

33. Search in Rotated Sorted Array