力扣704(二分查詢)兩種方法(二分法,遞迴法)

2021-10-07 12:42:37 字數 1360 閱讀 6851

給定乙個 n 個元素有序的(公升序)整型陣列 nums 和乙個目標值 target ,寫乙個函式搜尋 nums 中的 target,如果目標值存在返回下標,否則返回 -1。

class solution:

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

l = 0 #定義l從頭開始r從尾部開始

r = len(nums) - 1

while l <= r:

if target not in nums:

return -1 #如果給定值不在列表中返回-1

if nums[l] == target:

return l

elif nums[r] == target:

return r

else :

mid = (l+r) // 2 #如果給定值不在頭部或者尾部 則取中間索引的值

if nums[mid] > target: #中間的值大於給定的值(target ),則把中間的值賦值給r(尾部),給定值在頭部和mid之間

r = mid

elif nums[mid] < target: #同上理論

l = mid

else:

return mid # 返回給定值在列表中的索引

def val_(val , nums , left ,right):#定義乙個函式

if right > 0 : #如果右面的指標大於0則繼續執行

mid = left + (right - left) // 2 #為了防止資料超出記憶體,定義乙個中間值

if val == nums[mid]: #如果給定的值在index為mid上,則返回這個索引index

return mid

elif val > nums[mid]: #如果給定的值大於這個索引下的值

return val_(val , nums , mid+1 , right) #給定義的未知量重新定義(x相當於賦值給第一行),

else:

return val_(val , nums , left , mid - 1 ) #同上

else :

return -1 #值不在表內的時候 返回-1

#下面是輸出

val = 55

nums=[1,2,5,9,11,55,88]

left = 0

right = len(nums)

輸出print(val_(val , nums , left , right))

704 二分查詢

給定乙個 n 個元素有序的 公升序 整型陣列 nums 和乙個目標值 target 寫乙個函式搜尋 nums 中的 target,如果目標值存在返回下標,否則返回 1。示例 1 輸入 nums 1,0,3,5,9,12 target 9 輸出 4 解釋 9 出現在 nums 中並且下標為 4 示例 ...

二分查詢704

給定乙個 n 個元素有序的 公升序 整型陣列 nums 和乙個目標值 target 寫乙個函式搜尋 nums 中的 target,如果目標值存在返回下標,否則返回 1。示例 1 輸入 nums 1,0,3,5,9,12 target 9 輸出 4 解釋 9 出現在 nums 中並且下標為 4 示例 ...

704 二分查詢

簡單 704.二分查詢 給定乙個 n 個元素有序的 公升序 整型陣列 nums 和乙個目標值 target 寫乙個函式搜尋 nums 中的 target,如果目標值存在返回下標,否則返回 1。示例 1 輸入 nums 1,0,3,5,9,12 target 9 輸出 4 解釋 9 出現在 nums ...