数组中元素的最大数量,使得它们的总和小于或等于k。

6
我希望您能帮助找出给定正整数数组中,元素之和小于或等于给定数k的最大元素数量。例如,我有一个数组:
[3,4,7,2,6,5,1] and k=6;

答案是3,因为1、2、3是能够使总和为6的最大元素。
3个回答

7

对数组进行排序,计算元素数量,然后开始顺序相加元素,直到它们的总和大于k或您已经遍历了每个元素,如果总和大于k,则从计数中减去1。

伪代码:


``` sort(array) count = length(array) sum = 0 for i in range(count): sum += array[i] if sum > k: count -= 1 break if sum <= k: count = 0 ```
    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 是元素的最大数量。


1
一种更“Swift”的方式可能是:

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

抱歉,我没听懂。可能是因为它是用Java C以外的语言编写的,或者我不了解这些内容。您能详细说明一下吗? - Brij Raj Kishore
抱歉,我以为这是一个有关Swift语言的问题。现在我意识到它不是。Filter()是Swift中的高阶函数,允许您使用一行代码完成此类操作,并且非常高效。如果我让任何人感到困惑,我很抱歉! - DJohnson

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

#示例成本=[10,2,10,10,10,10,8,2,7,8] 硬币=25 答案=4 - sakigo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接