假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。
( 例如,陣列 [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 思路 大家都能想到,我每次從裡面選擇乙個數,然後把所有的可能...