原題:
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。
( 例如,陣列 [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
首先,我們採用直接的查詢方法:
def search(self, nums: list, target: int) -> int:
i = len(nums)
for j in range(0,i):
if nums[j]==target:
return j
return -1
self =
nums=[4,5,6,7,0,1,2]
target = 3
print(search(self,nums,target))
接下來,我們採用二分方法:開始時定義left、right指標,將left指向開頭,right指向末尾;與target比較;如果nums[left]nums[right-1],呼叫二分法查詢left到right的範圍
**:二分法:
def half(nums:list,target:int)->int:
i = len(nums)
left = 0
right = i-1
while left<=right:
s = int((left+right)/2)
mid = nums[s]
if mid ==target:
return s
elif mid 函式:
def search(self, nums: list, target: int) -> int:
i = len(nums)
left = 0
right = i-1
while leftnums[left]:
left = left+1
if nums[left]nums[right+1]:
half(nums[left:right],target)
break
else:
return -1
return -1
self =
nums=[4,5,6,7,0,1,2]
#nums = [0,1,2,3,4,5]
target = 5
print(search(self,nums,target))
leetcode練習之陣列33 搜尋旋轉排序陣列
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 1 你可以假設陣列中不存在重複的元素。你的演算法時間複雜度必須是 o log n 級別。示例...
leetcode 騰訊 旋轉鍊錶
原題 給定乙個鍊錶,旋轉鍊錶,將鍊錶每個節點向右移動 k 個位置,其中 k 是非負數。示例 1 輸入 1 2 3 4 5 null,k 2 輸出 4 5 1 2 3 null 解釋 向右旋轉 1 步 5 1 2 3 4 null 向右旋轉 2 步 4 5 1 2 3 null 示例 2 輸入 0 1...
騰訊 搜尋旋轉排序陣列
假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。例如,陣列 0,1,2,4,5,6,7 可能變為 4,5,6,7,0,1,2 搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 1。你可以假設陣列中不存在重複的元素。你的演算法時間複雜度必須是 o log n 級別。示例...