首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用“锦标赛”(Java)从数组中获取最大n个数字

使用“锦标赛”(Java)从数组中获取最大n个数字
EN

Stack Overflow用户
提问于 2015-02-05 00:52:40
回答 4查看 545关注 0票数 0

我有一个长度为10的数组:

代码语言:javascript
运行
复制
Population = {1,3,4,2,7,-2,0,8,9,5}.

我生成两个介于0-9之间的随机数(例如4和6)。然后我检查第四个和第六个元素(7,0),“获胜者”是较大的数字。因此,7进入赢家数组(总共5个赢家):

代码语言:javascript
运行
复制
Winners = {7, ...}

每次我想要将剩余的两个数字(包括输家)配对,并将赢家放入赢家数组。

要做到这一点,最简单的方法是使用大小为n的非固定大小的数组,并从“population”中删除一个获胜者,并将其放入“获胜者”中。然后,我可以生成1和n-1之间的两个随机数,并继续这个过程。

在Java中,如何使用固定大小的数组来完成此操作?我怎么能从我的数组中选择两个数字,而忽略任何‘赢家’的数字?

EN

Stack Overflow用户

发布于 2015-02-05 00:59:04

您可以确定获胜者,然后将其交换到数组的后面:

代码语言:javascript
运行
复制
int[] population = {1,3,4,2,7,-2,0,8,9,5};
private void turnament() {
    for (int i = population.length - 1; i >= population.length / 2; i--) {
        //you might want to make sure m != n.
        int m = (int) Math.round(Math.random() * i);
        int n = (int) Math.round(Math.random() * i);
        int temp = population[i];
        if (population[m] > population[n]) {
            population[i] = population[m];
            population[m] = temp;
        } else {
            population[i] = population[n];
            population[n] = temp;
        }
    }
}

这将做population.length / 2锦标赛,并将获胜者写在后面,所以最后一个元素将是第一个获胜者,第二个倒数第二个获胜者,依此类推。

或者正如@Aniket Thakur提到的那样,ArrayList将是一个很好的数据结构。

票数 1
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28326956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档