如何使用Java从数组中获取指定数量的最大n个元素
实现方案
现有代码仅能通过遍历得到单个最大值,要实现获取任意数量的TopN最大元素,可按以下逻辑改造:
- 新增用户输入项,接收需要获取的最大元素个数
- 增加输入合法性判断,避免输入的个数为负、为0,或者超过数组总长度导致程序报错
- 用内置排序方法对数组排序后,直接截取对应数量的最大元素即可,逻辑简单不需要复杂实现
改造后可直接运行的代码
import java.util.*; public class anna { public static void main(String[] args) { int arrayLength, topN; Scanner s = new Scanner(System.in); System.out.print("请输入数组元素总个数:"); arrayLength = s.nextInt(); int a[] = new int[arrayLength]; System.out.println("请逐个输入数组元素:"); for(int i = 0; i < arrayLength; i++) { a[i] = s.nextInt(); } System.out.print("请输入你要获取的最大元素个数:"); topN = s.nextInt(); // 校验输入是否合法 if (topN <= 0 || topN > arrayLength) { System.out.println("输入不合法:要获取的元素个数必须在1到" + arrayLength + "之间"); return; } // 对数组做升序排序 Arrays.sort(a); System.out.println("数组中最大的" + topN + "个元素为:"); // 升序排序后从末尾往前取topN个值,就是最大的N个元素 for(int i = arrayLength - 1; i >= arrayLength - topN; i--) { System.out.print(a[i] + " "); } } }
补充说明
- 代码里用的
Arrays.sort()是JDK内置的排序实现,日常入门场景性能足够,不需要自己手写排序逻辑 - 如果需要输出的元素保持原数组中的相对顺序,可以先拷贝一份原数组再做排序处理,避免修改原数组的元素顺序
- 如果数组长度极大、需要取的TopN数量很小(比如百万长度数组取Top10),可以用小顶堆实现,时间复杂度会比全数组排序更低,常规场景下直接排序的写法最简洁不容易出错
内容的提问来源于stack exchange,提问作者joker
相关产品推荐
相关产品推荐

