0
点赞
收藏
分享

微信扫一扫

#yyds干货盘点# 解决华为机试:输入n个整数,输出其中最小的k个

女侠展昭 2022-03-12 阅读 107

1.简述:

描述

输入n个整数,输出其中最小的k个整数并按升序输出

本题有多组输入样例

数据范围:1 \le n \le 1000 \1≤n≤1000  ,输入的整数满足 1 \le val \le 10000 \1≤val≤10000 

输入描述:

第一行输入两个整数n和k

第二行输入一个整数数组

输出描述:

输出一个从小到大排序的整数数组

示例1

输入:

5 2
1 3 5 7 2

复制输出:

1 2

2.代码实现:

import java.util.*;

public class Main {

public Main() {
}

public boolean getMinK(int n, Integer[] pInputArray, int k, Integer[] pOutputArray) {
if (k > n) return false;
PriorityQueue<Integer> pq = new PriorityQueue<>(k, new Comparator<Integer>(){
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
for (Integer i : pInputArray) {
if (pq.size() == k && i < pq.peek()) {
pq.poll();
}
if (pq.size() < k) {
pq.offer(i);
}
}
for (int i = k - 1; i >= 0; i--) {
pOutputArray[i] = pq.poll();
}
return true;
}

public static void main(String[] args) {
Main solution = new Main();
Scanner in = new Scanner(System.in);
while (in.hasNextInt()) {
int n = in.nextInt(), k = in.nextInt();
Integer[] pInputArray = new Integer[n];
Integer[] pOutputArray = new Integer[k];
for (int i = 0; i < n; i++) {
pInputArray[i] = in.nextInt();
}
boolean res = solution.getMinK(n, pInputArray, k, pOutputArray);
if (res) {
for (Integer i : pOutputArray) {
System.out.print(i + " ");
}
System.out.println();
}
}
}
}


举报

相关推荐

0 条评论