leetcode 騰訊 搜尋旋轉排序陣列

2021-10-01 01:53:28 字數 1489 閱讀 1270

原題:

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

( 例如,陣列 [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 級別。示例...