33 搜尋旋轉排序陣列

2021-10-06 09:25:58 字數 1704 閱讀 1021

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

( 例如,陣列 [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

二分查詢

演算法很簡單,寫的我很懵

class

solution

:def

search

(self, nums: list[

int]

, target:

int)

->

int:

deft_serarch

(nums,target,i,j)

:while i<=j:

if target>nums[

(i+j)//2

]:i=

(i+j)//2

+1elif target(i+j)//2

]:j =

(i+j)//2

-1else

:return

(i+j)//2

return-1

deft_t_search

(nums,target,i,j)

:if i==j:

if target==nums[i]

:return i

else

:return-1

elif nums[

(i+j)//2

]>= nums[i]

:if target >= nums[i]

and target <= nums[

(i+j)//2

]:return t_serarch(nums,target,i,

(i+j)//2

)else

:return t_t_search(nums,target,

(i+j)//2

+1,j)elif nums[

(i+j)//2

]:if target>=nums[

(i+j)//2

]and target<=nums[j]

:return t_serarch(nums,target,

(i+j)//2

,j)else

:return t_t_search(nums,target,i,

(i+j)//2

-1) i =

0 j =

len(nums)-1

if jreturn-1

return t_t_search(nums,target,i,j)

class

solution

else

}else

else}}

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 級別。示例...