题目大概就是输出前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) 回帖