我希望您能帮助找出给定正整数数组中,元素之和小于或等于给定数k的最大元素数量。例如,我有一个数组:
答案是3,因为1、2、3是能够使总和为6的最大元素。
[3,4,7,2,6,5,1] and k=6;
答案是3,因为1、2、3是能够使总和为6的最大元素。
对数组进行排序,计算元素数量,然后开始顺序相加元素,直到它们的总和大于k或您已经遍历了每个元素,如果总和大于k,则从计数中减去1。
伪代码:
let k=6
sort the array
[1,2,3,4,5,6,7]
let sum=0
let count=7 //(7 elements in the array)
for (i=0;i<7;i++) {
sum+=array[i];
if (sum>k)
break;
}
if (sum>k)
i--;
i
是元素的最大数量。
var maxSum = 6
var newSum = 0
let maxElements = [3,4,7,2,6,5,1].sort().filter() {
if $0 + newSum <= maxSum {
newSum += $0
return true
}
return false
} .count //returns 3
int maxIceCream(vector<int>& costs, int coins) {
sort(costs.begin(), costs.end());
int ret = 0;
for (auto p : costs) if (coins >= p) {
coins -= p;
ret++;
}
return ret;
}
Filter()
是Swift中的高阶函数,允许您使用一行代码完成此类操作,并且非常高效。如果我让任何人感到困惑,我很抱歉! - DJohnson