Search in Rotated Sorted Array
Given a rotated sorted array of unique integers and a target, return the index of target, or -1 if not found. Must run in O(log n).
Example 1
Input: nums=[4,5,6,7,0,1,2], target=0 → Output: 4
Example 2
Input: nums=[4,5,6,7,0,1,2], target=3 → Output: -1
Solution Approach
Binary search with rotation handling: at each step determine which half is sorted, then check if target falls in that sorted half.
- If nums[mid]==target return mid.
- If left half [lo..mid] is sorted (nums[lo]<=nums[mid]):
- If target in [nums[lo], nums[mid]), search left; else search right.
- Else right half [mid..hi] is sorted:
- If target in (nums[mid], nums[hi]], search right; else search left.
Java
class Solution {
public int search(int[] nums, int target) {
int lo = 0, hi = nums.length - 1;
while (lo <= hi) {
int mid = lo + (hi - lo) / 2;
if (nums[mid] == target) return mid;
if (nums[lo] <= nums[mid]) { // left sorted
if (target >= nums[lo] && target < nums[mid]) hi = mid - 1;
else lo = mid + 1;
} else { // right sorted
if (target > nums[mid] && target <= nums[hi]) lo = mid + 1;
else hi = mid - 1;
}
}
return -1;
}
}
- Time Complexity: O(log N)
- Space Complexity: O(1)