腾讯笔试,有人能帮忙看看后台第三题吗,为什么是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));
        }
    }
}


#腾讯##笔试题目#
全部评论
思路一样,0.7,费解
点赞
送花
回复 分享
发布于 2020-09-06 22:43
最大的k个得用小根堆,反之用大跟堆
点赞
送花
回复 分享
发布于 2020-09-06 22:53
现代汽车中国前瞻数字研发中心
校招火热招聘中
官网直投
个人认为是Java里面Integer类型缓存池的问题(缓存范围是 -128~127),可以试试 Integer a = 128; Integer b = 128;  判断这两个相等返回的是 false; 所以应该是 map.get(o1).equals(map.get(o2))。
点赞
送花
回复 分享
发布于 2020-09-06 23:05

相关推荐

1 4 评论
分享
牛客网
牛客企业服务