二分法 搜尋旋轉排序陣列

2021-10-09 02:59:10 字數 1856 閱讀 5366

leetcode33:搜尋旋轉排序陣列(無重複元素)

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

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

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

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

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

輸出: 4

def

search

(nums,target):if

not nums:

return-1

left, right =0,

len(nums)-1

while left<=right:

mid =

(left + right)//2

if nums[mid]

== target:

return mid

if nums[left]

<= nums[mid]

:if nums[left]

<= target < nums[mid]

: right = mid-

1else

: left = mid +

1else

:if nums[mid]

< target <= nums[right]

: left = mid+

1else

: right = mid -

1return

-1

leetcode81: 搜尋旋轉排序陣列 ii (有重複元素)

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

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

編寫乙個函式來判斷給定的目標值是否存在於陣列中。若存在返回 true,否則返回 false。

def

search

( nums , target ):if

not nums:

return

false

left, right =0,

len(nums)-1

while left<=right:

mid =

(left + right)//2

if nums[mid]

== target:

return

true

if(nums[mid]

==nums[left]

==nums[right]):

left +=

1 right-=

1elif nums[left]

<= nums[mid]

:if nums[left]

<= target < nums[mid]

: right = mid-

1else

: left = mid +

1else

:if nums[mid]

< target <= nums[right]

: left = mid+

1else

: right = mid -

1return

false

二分法 33 搜尋旋轉排序陣列

給你乙個公升序排列的整數陣列 nums 和乙個整數 target 假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 請你在陣列中搜尋 target 如果陣列中存在這個目標值,則返回它的索引,否則返回 1 示例 1 輸...

搜尋旋轉排序陣列 (二分法實現)

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,0,1,2,2,5,6 可能變為 2,5,6,0,0,1,2 編寫乙個函式來判斷給定的目標值是否存在於陣列中。若存在返回 true,否則返回 false。示例1 輸入 nums 2,5,6,0,0,1,2 target 0 輸出...

33 搜尋旋轉排序陣列 二分法

時隔半年再次嘗試這題,當時做的太複雜 二分法注意細節 1.左右端點初始化時,右端點記得 1 l,r 0,len nums 1 2.二分查詢結束的判斷條件,記得加等號 while l r 3.mid 的 賦值 mid l r l 2 或者 mid l r 2 4.二分法的跳出條件 if nums mi...