参考 LeetCode Binary Search Summary 二分搜索法小结 的 python 版
今天偷懒一下,拿以前的小笔记来自我抄袭。
def binary_search(nums, target):
l, r = 0, len(nums)
while l < r:
mid = l + (r - l) // 2
if nums[mid] == target :
return mid
elif nums[mid] < target:
l = mid + 1
else:
r = mid
return -1
可变动的 4 个地方:
len(nums)
或 len(nums) - 1
l < r
或 l <= r
r = mid
或 r = mid - 1
l
或 r
或 r-1
r = len(nums)
l < r
r = mid
r = len(nums) - 1
l <= r
r = mid - 1
nums[mid] == target
判断第一个不小於目标的数
# [1, 1, 2, 3, 6] t = 4
def bs_lowerbound(nums, target):
l, r = 0, len(nums)
while l < r:
mid = l + (r - l) // 2
if nums[mid] < target:
l = mid + 1
else:
r = mid
return r
往前退,就是 最後一个小於目标的数
return r - 1 即可
除了 == 部分,其他都一样。
# [1, 1, 2, 3, 6] t = 4
def bs_upperbound(nums, target):
l, r = 0, len(nums)
while l < r:
mid = l + (r - l) // 2
if nums[mid] <= target: # == 时也要移动左边界
l = mid + 1
else:
r = mid
return r
return r - 1 即可
难QQ 要经验
Minimize Max Distance to Gas Station
Swim in Rising Water
Split Array Largest Sum
Guess Number Higher or Lower
Find K Closest Elements
Find K-th Smallest Pair Distance
Kth Smallest Number in Multiplication Table
Maximum Average Subarray II
Koko Eating Bananas
Nth Magical Number
Find Peak Element
H-Index II
<<: 11. 解释 Callback Hell & 使用Promise
MLOps is an emerging discipline and comprises a s...
Tag:随意刷-未写过的 Source: 995. Minimum Number of K Cons...
今天我们用一个实例来分析,如何从视觉化报表中看出隐藏在日志中我们想查看的讯息。接下来使用的范例资料都...
Vim的思维、哲学与解决问题之道 [系列文目录] 每种工具都有它的设计理念,在接触Vim的前後,我们...
CDN缓存命中率低的可能原因如下: HTTP Header设置不当导致无法缓存,请检查源站Cache...