如何最快在N个有序的整数数组中取得最大K个数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何最快在N个有序的整数数组中取得最大K个数?相关的知识,希望对你有一定的参考价值。

这个是个分布式编程的问题,比如一个商业银行网络具有1000个对等服务器集群分布在1000个城市,通过远程网络与中心结算服务器建立了连接,每个服务器维护一份已经根据储户储值从大到小排好序的储户列表,平均每个列表有1000W行记录。
那么如何在这所有的100Y(1000*1000W)条记录中快速地精确地得出100W个储值最大的储户列表?

参考技术A 你得说说清楚,是软件应用还是编程哪。
最简单的方法,把这些数输入到EXCEL的一列里,然后在菜单栏里找“排序”,就有结果了。

根据你的补充,现在知道是编程的问题了。那么,有没有编程环境的限制呢?比如SQL之类的。
参考技术B 如数据在A列

=LARGE($A$1:$A$23,ROW(A1))下拉几行就是第几个最大值。

16-求连续数组和最大

/* 题目内容:

给定长度为n的整数序列,a[1...n], 求[1,n]某个子区间[i , j]使得a[i]+…+a[j]和最大.或者求出最大的这个和.例如(-2,11,-4,13,-5,2)的最大子段和为20,所求子区间为[2,4].

输入描述

第一行为一个整数n,表示数组有n个数据,第二行依次输入n个整数

输出描述

计算出n个整数中连续k个数的最大和

输入样例

5
1 2 3 4 5

7
6 -5 5 8 -13 5 7
输出样例

15
14
*/

#include <iostream>
using namespace std;
int a[10000];
int f[10000];

int main(){
    int n;
    cin >> n;
    for(int i = 0; i < n; i++)
        cin >> a[i];
    f[0] = a[0];
    int max = a[0];
    for(int i = 1; i < n; i++){
        if(f[i - 1] > 0)
            f[i] = f[i - 1] + a[i];
        else
            f[i] = a[i];
        if(max < f[i])
            max = f[i];
    }
    cout << max ;
    return 0;
}

以上是关于如何最快在N个有序的整数数组中取得最大K个数?的主要内容,如果未能解决你的问题,请参考以下文章

求c++程序 算出a[100]数组里面的最大的10个数,速度最快

最强解析面试题:在无序数组中取最大的K个数「建议收藏!」

用JAVA语言编译:数组中包含n个整数,从其中找出k个最小的数,写出你能想到的最快的方法!!!

POJ 2976 3111(二分-最大化平均值)

如何查找无序数组中的Top n

找出n个有序数组中第K小的数。怎么写算法啊?各位帮帮忙!