python - 预算内的一对商品价格
问题描述
我正在尝试练习二进制搜索。目的是找到预算范围内的一对项目价格。
def binary_search(arr, lo, hi, x):
while lo < hi:
count = 0
sum = arr[lo] + arr[hi]
if sum <= x:
result = [arr[lo], arr[hi]]
print(result)
count += 1
return binary_search(arr, lo, hi-1, x)
else:
return binary_search(arr, lo, hi-1, x)
A = [1, 2, 3, 4, 6, 7, 8]
print(binary_search(A, 0, len(A)-1, 10))
如您所见,我只能找到第一项和其他项:
(1,8)
(1,7)
(1,6)
(1,5)
(1,4)
(1,3)
(1,2)
当然,我可以再次使用
return binary_search(arr, lo+1, hi, x)
在函数中找到其他对,但这并不理想。
或者我可以以非常简单的方式使用 itertools。
from itertools import combinations
A = [1, 2, 3, 4, 6, 7, 8]
budget = 10
comb = combinations(A, 2)
answer = []
for i in list(comb):
if sum(i) <= 10:
print(I)
answer.append(i)
print(len(answer))
print(answer)
有没有更好的方法来使用二进制搜索来处理这个问题。任何帮助都非常感谢!
解决方案
推荐阅读
- jq - 从对象数组中提取嵌套属性
- java - ANDROID STUDIO - 设备断开电源时服务不工作
- android-webview - TalkBack 在 WebView 上宣布“双击并按住以长按”
- sql - 在 SQL Server 中将毫秒转换为日期以获取 2040 年 1 月 1 日之后的日期
- c++ - 在实践中,从父母到孩子的 dynamic_cast 什么时候有用?这总是不好的做法吗?
- c++ - 如何将模板类用于容器容器?
- reactjs - 在反应中,当 src 目录与反应应用程序中的其他目录进行符号链接时,会引发渲染错误
- azure-storage - 如何通过 VPN 访问 Azure 存储?私人端点?
- reactjs - 历史更改 url 不加载
- java - Java - 我如何要求用户输入以继续或按他/她的意愿停止?