33. Search in Rotated Sorted Array
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).
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
難度:medium
題目:假設一個按升序排序的陣列在某個未知的軸上旋轉。
給定一個搜尋值,如果能找到則返回其所在陣列中的位置,否則返回-1. 假定陣列中無重複元素。演算法時間複雜度要為O(log n)
思路:二叉搜尋
Runtime: 10 ms, faster than 21.83% of Java online submissions for Search in Rotated Sorted Array.
Memory Usage: 26.8 MB, less than 41.44% of Java online submissions for Search in Rotated Sorted Array.
class Solution { public int search(int[] nums, int target) { int left = 0; int right = nums.length - 1; while (left <= right) { int mid = left + (right - left) / 2; if (target == nums[mid]) { return mid; } // left < mid </> right if (nums[left] < nums[mid]) { if (target > nums[mid] || target < nums[left]) { left = mid + 1; } else { right = mid - 1; } } else if (nums[left] > nums[mid]) { // left > mid </> right if (target < nums[mid] || target > nums[right]) { right = mid - 1; } else { left = mid + 1; } } else { // left = mid left += 1; } } return -1; } }