33 搜尋旋轉排序陣列

2021-10-03 13:48:09 字數 1063 閱讀 8780

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。

( 例如,陣列 [0,1,2,4,5,6,7] 可能變為 [4,5,6,7,0,1,2] )。

搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 -1 。

你可以假設陣列中不存在重複的元素。

你的演算法時間複雜度必須是 o(log n) 級別。

示例 1:

輸入: nums = [4,5,6,7,0,1,2], target = 0

輸出: 4

示例 2:

輸入: nums = [4,5,6,7,0,1,2], target = 3

輸出: -1

假設原陣列是1 2 3 4 5 6 7 8

1.     7 8 1 2 3 4 5 6       nums[mid]2.     3 4 5 6 7 8 1 2       nums[mid]>=nums[left] 這種情況 可以看出是從mid開始的左邊有序

為什麼這麼分析?

題目要求o(logn)明顯是要求用二分查詢,而這個演算法的適用場景是有序陣列,因此通過上面的分析我們知道下一步該怎麼走!

class solution:

def search(self, nums: list[int], target: int) -> int:

if not nums:

return -1

left = 0

right = len(nums)-1

while left<=right:

mid = (left+right)//2

if nums[mid] == target:

return mid

if nums[mid]>=nums[left]:

if target>=nums[left] and targetnums[mid] and target<=nums[right]:

left=mid+1

else:

right=mid-1

return -1

33 搜尋旋轉排序陣列

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 1。你可以假設陣列中不存在重複的元素。你的演算法時間複雜度必須是 o log n 級別。示例...

33 搜尋旋轉排序陣列

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 1。你可以假設陣列中不存在重複的元素。你的演算法時間複雜度必須是o log n 級別。輸入 ...

33 搜尋旋轉排序陣列

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 1。你可以假設陣列中不存在重複的元素。你的演算法時間複雜度必須是 o log n 級別。示例...