algorithm - 求个位数数组的 N 个最大元素的总和

标签 algorithm

<分区>

Possible Duplicate:
Retrieving the top 100 numbers from one hundred million of numbers

我有一个数组,它包含 0 到 9 之间的正数(数字可以重复)。我想找到 N 个最大元素的总和

For example array =  5 1 2 4 and N=2
ans = 5+4 = 9

简单方法:对数组进行排序并找到 n 个最大元素的总和。但是我不想用它

最佳答案

最简单的 O(n) 解决方案如下:

  1. 遍历数组a并增加b[a[i]]其中 b是 10 个整数的零初始化数组。
  2. 运行b从末尾开始(第 9 位置)并且如果 b[i]低于N添加 b[i] * i根据您的回答,然后减少 N通过 b[i] ,否则如果 b[i]大于或等于 N添加 N * i到答案并循环。

编辑: 代码

vector<int> b(10, 0);
for(int i = 0; i < a.size(); ++i) {
    b[a[i]]++;
}

int sum = 0;
for(int i = 9;  i >= 0; --i) {
    if(b[i] < n) {
        sum += b[i] * i;
        n -= b[i];
    } else {
        sum += n * i;
        n = 0;
        break;
    }
}
if(n != 0) {
    // no enough element in the array
}

关于algorithm - 求个位数数组的 N 个最大元素的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6587021/

相关文章:

c# - 使用哈希表查找字符串中的字符

algorithm - 哈密​​顿路径和社交图谱算法

java - Java-> iText->拼版(n-Up)->示例

algorithm - 分而治之算法的属性示例

javascript - 在一个数组中查找小于或等于另一个数组中的数字的数字?

c# - 在 C# 中查找节点的深度

c - 修复c中的树结构

java - 如何缩短使用相似代码的不同场景的算法?

algorithm - 计算斐波那契数列中的前一个数字

performance - 大O,对一系列n个数字求和的复杂性是多少?