【发布时间】:2022-11-29 02:09:29
【问题描述】:
我有一个值数组示例:
[[1,15], [3,20], [4,30]]每个元素都有两个值,amount我们需要在第0个索引处支付,items我们可以在第一个索引处收取。另外,我的 budget 为 4。
对于这个例子,我可以收集元素[[1,15], [3,20]],因为1+3 = 4符合我的预算,我可以收集的项目是15+20 = 35 which is the maximum。
我想找出我可以使用此预算收集的最大项目数。
这是我的程序:
public static long solve(List<List<Long>> arr, long budget) {
arr.sort((a, b) -> {
int z = Long.compare(a.get(0) , b.get(0));
if(z == 0) {
z = Long.compare(b.get(1) , a.get(1));
}
return z;
});
long total = 0;
long result = 0;
for(List<Long> list : arr) {
if(total + list.get(0) <= budget) {
total += list.get(0);
result += list.get(1);
} else {
break;
}
}
}
该程序适用于上述问题。
这是程序给出错误结果的另一个例子。
[[50, 200], [100, 800],[200, 1000], [500, 2000], [1000, 3000]],每个元素有两个值,我们需要在第 0 个索引处支付的金额和我们在第 1 个索引处可以收集的项目。另外,我的预算是1700。
结果应该是项目 [200, 1000], [500, 2000], [1000, 3000] ,所以 1000+2000+3000 = 6000 但我的程序返回 4000 因为我的错误方法。
这个问题的正确方法是什么?
【问题讨论】: