首页 > 腾讯笔试,有人能帮忙看看后台第三题吗,为什么是0.7
头像
Isaac.
编辑于 2020-09-06 22:48
+ 关注

腾讯笔试,有人能帮忙看看后台第三题吗,为什么是0.7

题目大概就是输出前K个最大,输出前K个最小的那题
我想知道我是漏了什么条件吗,我排查了半小时没找出原因,一直没A

import java.util.Comparator;
import java.util.HashMap;
import java.util.PriorityQueue;
import java.util.Scanner;

public class Main {
    // 字符串次数
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int k = sc.nextInt();
        HashMap<String, Integer> map = new HashMap<>(); // key 是字符串,value 是频率
        for (int i = 0; i < n; i++) {
            String s = sc.next();
            map.put(s, map.getOrDefault(s, 0) + 1); // 存入map
        }


        PriorityQueue<String> maxHeap = new PriorityQueue<>(new Comparator<String>() { @Override public int compare(String o1, String o2) {
                if (map.get(o1) == map.get(o2)) // 字典序
                    return o1.compareTo(o2);
                else
                    return map.get(o2) - map.get(o1); // 频率高的
            }
        });
        for (String s: map.keySet()){ // 遍历map,放入最大值堆中
            maxHeap.add(s);
        }
        for (int i = 0; i < k ;i++){ // 取前k个最大,搭配上频率输出
            String s = maxHeap.poll();
            System.out.println(s + " " + map.get(s));
        }


        // 以下类似
        PriorityQueue<String> minHeap = new PriorityQueue<>(new Comparator<String>() { @Override public int compare(String o1, String o2) {
                if (map.get(o1) == map.get(o2)) // 字典序
                    return o1.compareTo(o2);
                else
                    return map.get(o1) - map.get(o2); // 频率低的
            }
        });
        for (String s: map.keySet()){ // 遍历map,放入最小值堆中
            minHeap.add(s);
        }
        for (int i = 0; i < k ;i++){// 取前k个最小,搭配上频率输出
            String s = minHeap.poll();
            System.out.println(s + " " + map.get(s));
        }
    }
}


全部评论

(3) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐