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