python - Python:在数组中查找最大元素X的子数组,其总和小于或等于给定数字
问题描述
list1 = [2, 4, 6, 8, 10]
given_number = 7
问题如下:找到最大元素 X 的子数组,其总和小于或等于 Y。假设 X = 2 和 Y = 7,答案将是:[2, 4]
或[6]
。
现在这是一个广泛讨论的问题,我相信它被称为最大子阵列问题。然而,这个问题的非朴素解决方案只返回子数组的总和,而不提供子数组本身。这种解决方案的一个例子:
https://www.geeksforgeeks.org/maximum-sum-subarray-sum-less-equal-given-sum/?ref=lbp
我想知道,是否有一种非天真的方式来获得这个最佳子阵列?
编辑:这个问题的一个可能答案,尽管仍然很天真(所有功劳都归我的朋友所有):
1) 使用 itertools 创建所有子集组合:
combs = [list(x) for x in itertools.combinations(list1, number_of_elements)]
2)按总和大小排序:
sorted_combs = sorted(combs, key=lambda x: sum(x), reverse=True)
3) 获取低于/等于给定总和的第一个总和:
given_sum = 7
optimal_subset = None
for sc in sorted_combs:
if sum(sc) <= given_sum:
optimal_subset = sc
break
解决方案
推荐阅读
- java - Spring 在使用 MethodValidationPostProcessor 时返回 404
- mysql - 使用 unix_socket 登录 MySQL 帐户
- node.js - Discord.JS-Commando Discord Bot 中的 TypeError
- python - 我的代码中出现 KeyError: ' ' 但我不明白为什么
- mongodb - MongoDB 集群/水平扩展是免费的吗?
- javascript - 为什么 DOM document.createElement() 不起作用?
- ios - 在另一个之后添加一个 UITableView 单元格
- typescript - 如何在底层将类型与泛型函数相关联
- powershell - 如何在 PowerShell ScriptBlock 中激活 conda 环境
- assembly - MIPS 从 txt 文件中获取数据