打印N个数组整体最大的TopK

打印N个数组整体最大的Top K

http://www.nowcoder.com/questionTerminal/5727b69bf80541c98c06ab90cf4c509e

笨方法来一波

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.PriorityQueue;

/* 3 5
        5 219 405 538 845 971
        2 148 558
        4 52 99 348 691*/
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String[] str = reader.readLine().split(" ");
        int[] arr = parse(str, 2);
        int T = arr[0];
        int K = arr[1];
        PriorityQueue<Integer> pq = new PriorityQueue<>();
        while (T-- > 0) {
            str = reader.readLine().split(" ");
            arr = parse(str, str.length);
            for (int num : arr) {
                if (pq.size() < K) {
                    pq.offer(num);
                } else if (!pq.isEmpty() && num > pq.peek()) {
                    pq.poll();
                    pq.add(num);
                }
            }
        }
        reader.close();
        arr = new int[K];
        while (!pq.isEmpty()) {
           arr[--K] = pq.poll();
        }

        for (int num : arr) {
            System.out.print(num + " ");
        }
    }

    private static int[] parse(String[] str, int n) {
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = Integer.parseInt(str[i]);
        }
        return arr;
    }
}

全部评论

相关推荐

每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
大厂的边缘业务去了也没啥用,也得不到任何成长,尤其是审核、中台这种价值产出不清楚的,别被大厂光环蒙蔽了双眼,如果你找实习工作,优先找"离钱近的业务",钱多的业务福利年终奖啥的都不会差的
陈100:呵呵。 你在大厂工作2年,后面准备好,可以随便跳很多公司。 去小厂,现在拿到所谓多的钱,有啥用啊,未来没有了。 而且应届生,工作没几年的,也不是赚钱的时间。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务