首页 > 代码库 > Leetcode-Search in Rotated Sorted Array
Leetcode-Search in Rotated Sorted Array
Suppose a sorted array 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.
Analysis:
Suppose we have three pointers:start, mid and end. There are three case for the array between start and end:
1. A[mid] < A[start]: Rotated, the maximum value is on the left of mid. If target < A[mid], then we search the left part; if target > A[mid], we then have two situations: (a) target <= A[end], we search the right part; (b) target > A[end], search the left part.
2. A[mid] > A[end]: Rotated, the maximum value is on the right of mid. target > A[mid]: search the left part; target < A[mid] && < A[start]: search the right part; target < A[mid] && >= A[start]: search the left part.
3. Otherwise: Not rotated. Just perform normal binary search.
Solution:
1 public class Solution { 2 public int search(int[] A, int target) { 3 if (A.length==0) return -1; 4 5 int start = 0, end = A.length-1; 6 int mid = -1; 7 8 while (start<=end){ 9 mid = (start+end)/2;10 if (A[mid]==target) return mid;11 12 if (A[mid]<A[start]){13 if (target<A[mid])14 end = mid-1;15 else if (target<=A[end])16 start = mid+1;17 else end = mid-1;18 continue;19 }20 21 if (A[mid]>A[end]){22 if (target>A[mid]) start = mid+1;23 else if (target>=A[start]) end = mid-1;24 else start = mid+1;25 continue;26 }27 28 if (target<A[mid]) end = mid-1;29 else start = mid+1;30 }31 32 return -1;33 }34 }
Leetcode-Search in Rotated Sorted Array