33. Search in Rotated Sorted Array
題目網址: https://leetcode.cn/problems/search-in-rotated-sorted-array/
題意: 有一整數 array
nums按升序排列, 其中的值互不相同。給一旋轉後的 array
nums和一整數target, 如果nums中存在target, 則返回其 index; 否則, 返回-1。請設計 $O(log(n))$ time 的演算法。

Solution:
想法:利用 Binary Search, 將
nums從中間分開成左右兩部分的時候, 一定有一部分是有序的。e.g.
nums = [4,5,6,7,0,1,2], 從6切割, 可分成[4,5,6]和[7,0,1,2]兩個部分, 其中左邊[4,5,6]是有序的因此我們可以在 Binary Search 時查看當前
mid分割的兩個部分[left, mid]和[mid + 1, right]中哪個是有序的, 藉此來縮小左邊界 or 右邊界。
- 若
target == nums[mid], 則直接返回mid- 若
[left, mid]是有序的, 且target界於[nums[left], nums[mid])間, 則縮小搜索範圍為[left, mid - 1]; 否則, 縮小搜索範圍為[mid + 1, right]- 若
[mid + 1, right]是有序的, 且target界於(nums[mid], nums[right]]間, 則縮小搜索範圍為[mid + 1, right]; 否則, 縮小搜索範圍為[left, mid - 1]當
[left, mid]區間恰好只有一個元素時, 也滿足左半邊已排序的定義e.g.
nums = [3, 1],target = 1
left = 0,right = 1,mid = 0➔[left, mid]區間恰好只有一個元素, 使得nums[left] == nums[mid], 這時target應跟左半邊中的元素比較, 然後才縮小邊界
class Solution { |
- time:$O(log(n))$ ➔ Binary search
- space:$O(1)$ ➔ 只需常數空間
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論