最大编号数组中总和小于或等于 k 的元素



我想找到给定正整数数组中元素的最大数量,以便它们的总和小于或等于给定的 no. k。例如,我有一个数组

[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;
    }

最新更新