33. Search in Rotated Sorted Array

Leetcode

https://leetcode.com/problems/search-in-rotated-sorted-array/arrow-up-right

題目

There is an integer array nums sorted in ascending order (with distinct values).

Prior to being passed to your function, nums is possibly rotated at an unknown pivot index k (1 <= k < nums.length) such that the resulting array is [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]] (0-indexed). For example, [0,1,2,4,5,6,7] might be rotated at pivot index 3 and become [4,5,6,7,0,1,2].

Given the array nums after the possible rotation and an integer target, return the index of target if it is in nums, or -1 if it is not in nums.

You must write an algorithm with O(log n) runtime complexity.

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

Example 3:

Input: nums = [1], target = 0
Output: -1

解答

  • 方法一

先找出整個矩陣最大值的 index (rotateIndex),再看 target 應該是要在 rotateIndex 的左邊或右邊開始找

Runtime: 109 ms, faster than 14.09% of JavaScript online submissions for Search in Rotated Sorted Array.

Memory Usage: 39.6 MB, less than 83.42% of JavaScript online submissions for Search in Rotated Sorted Array.

  • 方法二

每次 binary search 時都根據 mid 跟 target 及 nums[0] 之間的大小關係,決定怎麼設定下次搜尋的上下限

Runtime: 76 ms, faster than 71.83% of JavaScript online submissions for Search in Rotated Sorted Array.

Memory Usage: 40.1 MB, less than 37.65% of JavaScript online submissions for Search in Rotated Sorted Array.

測資

Last updated