Python程式設計題51 二分查詢

2022-09-20 22:33:11 字數 1311 閱讀 1355

給定乙個含有 n 個無重複整數的公升序列表 nums 和乙個目標值 target  ,請查詢 nums 中的 target,如果目標值存在返回下標,否則返回 -1。

例如:

給定乙個列表 nums :[-1, 0, 3, 5, 9, 12],target = 9

返回結果:4

給定乙個列表 nums :[-1, 0, 3, 5, 9, 12],target = 2

返回結果:-1

在本題中說明了 nums 是乙個有序列表,並且列表中元素無重複,因此我們可以考慮使用二分查詢來實現。

我們可以發現,二分查詢的邏輯其實不難,但它在實現過程中,涉及到不少邊界條件,很容易弄亂,因此我們在實現過程中必須對變數的區間考慮清楚。

class solution:

def binary_search(self, nums, target):

left, right = 0, len(nums) - 1

while left <= right:

mid = (left + right) // 2

if nums[mid] > target:

right = mid - 1

elif nums[mid] < target:

left = mid + 1

else:

return mid

return -1

class solution:

def binary_search(self, nums, target):

return self.binary_search_recursive(nums, target, 0, len(nums) - 1)

def binary_search_recursive(self, nums, target, left, right):

if left > right:

return -1

mid = (left + right) // 2

if nums[mid] > target:

return self.binary_search_recursive(nums, target, left, mid - 1)

elif nums[mid] < target:

return self.binary_search_recursive(nums, target, mid + 1, right)

else:

return mid

python程式設計題彙總(持續更新中……)

python刷題 二分查詢

def binarysearch nums,target left 0 right len nums 1 while left right mid right left 2 if nums mid target return true elif nums mid target left mid 1 ...

二分查詢簡單題

leetcode 35.search insert position 最普通的binary search,若target存在,則返回所在下標 若target不存在,則返回target待插入的位置,本質上就是實現lower bound函式 無論mid left right left 2,還是mid l...

Python二分查詢

二分查詢又稱折半查詢,首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成...