假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。
( 例如,陣列 [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示例 2:輸出: 4
輸入: nums = [4,5,6,7,0,1,2], target = 3二分查詢:假設序列為 a b c d e f輸出: -1
首先判斷當前序列是正常的排序陣列還是旋轉陣列(通過比較a和f的大小);
再判斷目標值是否存在於當前序列(通過目標值與a和f的大小關係判斷);
如果目標值可能在該序列,則繼續進行二分查詢(二分後回到第一步);不存在返回-1。
class solution:
def search(self, nums: list[int], target: int) -> int:
l = len(nums)
return self.partition_search(nums, target, 0, l)
def partition_search(self, nums, target, start, end):
if end - start == 0:
return -1
if end - start == 1:
if nums[start]==target:
return start
else:
return -1
if nums[start]nums[end-1]:
return -1
else:
if targetnums[end-1]:
return -1
index = (start+end)//2
return max(self.partition_search(nums, target, start, index),
self.partition_search(nums, target, index, end))
學習筆記6 9
select prod name,prod price from products where prod price 3.49 select prod name,prod price from products where prod price 3.49 select prod name,prod ...
非旋Treap 學習筆記
今天學習了一下非旋tr eap 聽說效率很高而且可持久化 一臉懵逼qa q 非旋treap主要是兩個操作sp lit 和me rge 下面簡單描述一下 得先會tr eap 啊 va l 點的值 ke y ra nd的值 sp lit 就是我們把原tr eap 拆成兩個tr eap x,y 比如以va...
LeetCode第69場雙周賽
題目描述 將給定的句子按照題意格式化 思路 根據題意描述即可 時間複雜度 o n class solution else if res.size 0 res t else res t return res 題目描述 給你乙個鍊錶,其對應的陣列為 a 其長度為 n 保證 n 為偶數,下標從 0 開始,...