[1,2,6,9] 6
1+2
一种组合
lt =input()[1:].split(']')
l = list(map(int,lt[0].split(',')))
m = int(lt[1].split(',')[-1])
MAX = 1e9+7
n = len(l)
c = 0
l.sort()
r = n-1 # r不用每次都赋初始值!因为排序后,i增加,右边界肯定<=r。
#!!!!!!!!!!!!!!!!!二分+指针,nlogn
for i in range(n):
if i >= r:
break
# 二分寻找右边界 r为上次遍历的右边界。这次的右边界<=上次的右边界。
mid = r
while i < mid: # 为什么是<=,不是<, 因为r = (r + i) // 2时,i可能=r
if mid == n-1 and l[i]+l[mid] <= m: #注意mid==n-1的判断要写在前面,否则后面越界。
break
if mid < n-1 and l[i] + l[mid] <= m < l[i]+l[mid + 1]:#找到右边界 注意mid==n-1的判断要写在前面,否则后面越界。
break
elif l[i]+l[mid] <= m: ### 增大mid,右区间。
mid = (mid+1+r)//2 # 这里用到上次更新的右边界。
else: #### 减小mid,左区间。
这篇博客介绍了如何利用二分查找和指针技术,在数组 `[1, 2, 6, 9]` 中找到两数之和小于给定目标值 `6` 的组合,例如 `1+2`。"
132888995,8753399,JavaScript实现单板密码算法,"['javascript', '算法', '开发语言']
订阅专栏 解锁全文
738

被折叠的 条评论
为什么被折叠?



