假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。
(例如,陣列 [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
class
solution
:def
search
(self, nums: list[
int]
, target:
int)
->
int:
size =
len(nums)
if size ==0:
return-1
left =
0 right = size -
1while left < right:
# mid = left + (right - left + 1) // 2
mid =
(left + right +1)
>>
1if nums[mid]
< nums[right]
:if nums[mid]
<= target <= nums[right]
: left = mid
else
: right = mid -
1else
:if nums[left]
<= target <= nums[mid -1]
: right = mid -
1else
: left = mid
return left if nums[left]
== target else
-1
騰訊50題第8題
編寫乙個函式來查詢字串陣列中的最長公共字首。如果不存在公共字首,返回空字串 示例1 輸入 flower flow flight 輸出 fl 示例2 輸入 dog racecar car 輸出 解釋 輸入不存在公共字首。class solution def longestcommonprefix se...
騰訊50題第10題
給定乙個包括 n 個整數的陣列 nums 和 乙個目標值 target。找出 nums 中的三個整數,使得它們的和與 target 最接近。返回這三個數的和。假定每組輸入只存在唯一答案。例如,給定陣列 nums 1,2,1,4 和 target 1.與 target 最接近的三個數的和為 2.1 2...
騰訊50題第11題
將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。示例 輸入 1 2 4,1 3 4輸出 1 1 2 3 4 4class solution def mergetwolists self,l1,l2 if l1 is none return l2 elif ...