《LeetCode筆記69》 搜尋旋轉排序陣列

2021-10-06 06:23:19 字數 1254 閱讀 1249

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

( 例如,陣列 [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

二分查詢:假設序列為 a b c d e f

首先判斷當前序列是正常的排序陣列還是旋轉陣列(通過比較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 開始,...