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

Analysis

Binary search variation.

因为有pivot,rotate过的sorted array无法直接用标准binary search,在判断和修改搜索区间时需要做一些改变。

先根据nums[mid] 与 nums[right] 的大小关系,先判断中点mid相对pivot的位置

然后根据target和nums[left], nums[right]的关系,有一段区间满足单调性,以此继续做binary search.

Solution

Binary Search - compare mid point determine search direction - O(logn) time - (10ms, 30.57%)

Binary Search - Find the pivot position first

Last updated

Was this helpful?