java - 无需递归即可找到总和等于或小于给定数字的最大子集
问题描述
有一个Product
具有属性的对象price
,也给出了一个budget
。
从产品列表和给定预算中,如何获得价格总和等于或小于预算的最长产品子集。每个子集只允许 1 个产品。价格和预算总是积极的
例如
[
{id: 1, name: pr1, price: 1},
{id: 2, name: pr2, price: 1},
{id: 3, name: pr3, price: 1.5},
{id: 4, name: pr4, price: 3},
{id: 5, name: pr5, price: 2},
{id: 6, name: pr6, price: 4},
]
预算 = 6
结果
[
{id: 1, name: pr1, price: 1},
{id: 2, name: pr2, price: 1},
{id: 3, name: pr3, price: 1.5},
{id: 5, name: pr5, price: 2},
]
有没有可能在不递归的情况下解决这个问题
解决方案
正如乔丹在评论中所说,贪婪的解决方案会奏效。假设一个排序列表products
:
int sum = 0;
List<Product> subset = new ArrayList<>();
for (Product p : products) {
if (sum + p.price <= budget) {
subset.add(p);
sum += p.price;
} else return subset; // or break
}
通过首先添加最便宜的产品,您可以保证在达到预算之前可以安装尽可能多的产品。
推荐阅读
- git - 如何从某个提交开始 git push 到远程 GitHub?
- vba - DoCmd.OutputTo acOutputReport, "", acFormatPdf, ""& ".pdf", False 崩溃并仅为一个用户创建 .tmp 文件
- flutter - 使用相机时颤振在状态栏中显示点
- sql - 将自定义值添加到 SELECT
- javascript - Javascrypt 数字计数器
- c# - MySQL 按日期过滤
- java - 如何处理ResolutionException?
- linux - 未找到 在此服务器上未找到请求的 URL
- ssh - Databricks:使用 SSH 连接连接到 Redshift 集群
- django - request.session['pk'] = user.pk AttributeError: 'QuerySet' 对象没有属性 'pk'