给定String类型的数组strArr,再给定整数k,请严格按照排名顺序打印 出次数前k名的字符串。
[要求]
如果strArr长度为N,时间复杂度请达到
第一行两个整数N, k。N表示数组大小
接下来N行,每行一个字符串
输出K行,每行有一个字符串和一个整数。
你需要按照出现出现次数由小到大输出,若出现次数相同时字符串字典序较小的优先输出
4 2 1 2 3 4
1 1 2 1
4 2 1 1 2 3
1 2 2 1
保证输入的字符串仅含有大小写字母/数字
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.*; class Pair { String key; int value; public Pair(String key, int value) { this.key = key; this.value = value; } } public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] params = br.readLine().split(" "); int n = Integer.parseInt(params[0]); int k = Integer.parseInt(params[1]); HashMap<String, Integer> counter = new HashMap<>(); for(int i = 0; i < n; i++){ String key = br.readLine(); counter.put(key, counter.getOrDefault(key, 0) + 1); } PriorityQueue<Pair> pq = new PriorityQueue<>(new Comparator<Pair>(){ @Override public int compare(Pair pair1, Pair pair2) { if(pair1.value != pair2.value) return pair2.value - pair1.value; else return pair1.key.compareTo(pair2.key); } }); for(String key: counter.keySet()) pq.offer(new Pair(key, counter.get(key))); for(int i = 0; i < k; i++){ Pair pair = pq.poll(); System.out.println(pair.key + " " + pair.value); } } }