33 搜尋旋轉排序陣列

2021-10-24 19:46:25 字數 1306 閱讀 9862

原想法

class

solution

(object):

defsearch

(self, nums, target)

:"""

:type nums: list[int]

:type target: int

:rtype: int

"""n =

len(nums)

for i in

range

(n):

if nums[i]

== target:

return i

return

-1

思路

綜上,時間複雜度o(n),空間複雜度是o(1)。雖然也過了,不過應該用二分搜尋。

正確思路

class

solution

(object):

defsearch

(self, nums, target)

:"""

:type nums: list[int]

:type target: int

:rtype: int

"""n =

len(nums)

if n ==0:

return-1

l, r =

0, n -

1while l <= r:

mid =

(l+r)/2

if nums[mid]

== target:

return mid

if nums[0]

<= nums[mid]

:if nums[0]

<= target < nums[mid]

: r = mid -

1else

: l = mid +

1else

:if nums[mid]

< target <= nums[n-1]

: l = mid +

1else

: r = mid -

1return

-1

思路

有序陣列的查詢使用二分搜尋。

綜上,時間複雜度o(logn),空間複雜度是o(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 級別。示例...