<33> Search in Rotated Sorted Array
Description
Question: 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.
Your algorithm’s runtime complexity must be in the order of O(log n).
Leetcode link: 33. Search in Rotated Sorted Array
Idea
If we list all possible rotation of an array, we can notice below attributes:
- If the middle value is smaller than the rightmost element, than the sequence from the middle to the rightmost is ascending.
- Otherwise, the sequence from the leftmost to the middle is ascending.
Based on above attributes, we can further know if the target is right or left to the middle. If the target is larger than the middle but smaller than the rightmost value, the left bound should be shrinked. Otherwise, the right bound should be moved to left.
Test cases
Input | Expected Output |
---|---|
nums=[4,5,6,7,0,1,2], target=0 | 4 |
nums=[4,5,6,7,0,1,2], target=3 | -1 |
nums=[], target=3 | -1 |
nums=[3], target=3 | 0 |
Solution
1 | class Solution { |