leetcode 17 搜尋旋轉排序陣列

2022-06-13 03:51:07 字數 1477 閱讀 9866

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

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

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

你可以假設陣列中不存在重複的元素。

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

先找到陣列的中間點,陣列肯定會被分成兩部分,一部分是已經排序好的陣列,另一部分仍然是旋轉陣列,然後遞迴查詢。

class solution:

def search(self, nums, target: int) -> int:

def find(head ,tail):

while head<=tail:

mid = (head+tail)//2

if nums[mid]target:

tail = mid-1

else:

return mid

return none

def find2(start,end):

if end-start<=2:

for i in range(start,end+1):

if nums[i] == target:

return i

return none

s0 = start

s1 = (start+end)//2

s2 = end

if nums[s1]<=nums[s0]:

res = find2(s0,s1-1)

if res is not none:

return res

if target< nums[s1] or target>nums[s2]:

pass

else:

return find(s1,s2)

pass

elif nums[s1]>=nums[s2]:

res = find2(s1+1,s2)

if res is not none:

return res

if target< nums[s0] or target>nums[s1]:

pass

else:

return find(s0,s1)

else:

if target< nums[start] or target>nums[end]:

return none

else:

return find(s0,s2)

t = find2(0,len(nums)-1)

return t if t is not none else -1

s= solution()

print(s.search([4,5,6,7,0,1,2],4))

先二分查詢到最小值,恢復序列,(旋轉點一定是最小值)然後再二分查詢

LeetCode 17最長公共字首。

編寫乙個函式來查詢字串陣列中的最長公共字首。如果不存在公共字首,返回空字串 示例 1 輸入 flower flow flight 輸出 fl 示例 2 輸入 dog racecar car 輸出 解釋 輸入不存在公共字首。說明 所有輸入只包含小寫字母a z。以第乙個為基準,比較後面的。class s...

LeetCode 17 被圍繞的區域

碼上生花,echarts 作品展示賽正式啟動!給定乙個二維的矩陣,包含 x 和 o 字母 o 找到所有被 x 圍繞的區域,並將這些區域裡所有的 o 用 x 填充。示例 x x x x x o o x x x o x x o x x 執行你的函式後,矩陣變為 x x x x x x x x x x x...

Leetcode17 電話號碼組合

leetcode17 號碼組合 給定乙個僅包含數字 2 9 的字串,返回所有它能表示的字母組合。給出數字到字母的對映如下 與 按鍵相同 注意 1 不對應任何字母。示例 輸入 23 輸出 ad ae af bd be bf cd ce cf 思路 大家都能想到,我每次從裡面選擇乙個數,然後把所有的可能...