企业路由器的统计页面,有一个功能,需要动态统计公司访问最多的网页URL topN
请设计一个算法,可以高效动态统计TopN
的页面
每一行都是一个URL
或一个数字
如果是URL
代表一段时间内的网页访问
如果是一个数字N
代表本次需要输出的TopN
个URL
输入约束:
5000
个, 单网页访问次数小于65535
次URL
仅由字母数字和.分隔符组成,且长度小于等于127
字节10
,且小于当前总访问网页数每行输入对应一行输出
输出按访问次数排序的前N
个URL
,用逗号分割
输出要求:
URL
,按URL
的字符串字典序升序排列,输出排序靠前的URL
news.qq.com
news.sina.com.cn
news.qq.com
news.qq.com
game.163.com
game.163.com
www.huawei.com
www.cctv.com
3
www.huawei.com
www.cctv.com
www.huawei.com
www.cctv.com
www.huawei.com
www.cctv.com
www.huawei.com
www.cctv.com
www.huawei.com
3
news.qq.com,game.163.com,news.sina.com.cn
www.huawei.com,www.cctv.com,news.qq.com
news.qq.com
www.cctv.com
1
www.huawei.com
www.huawei.com
2
3
news.qq.com
www.huawei.com,news.qq.com
www.huawei.com,news.qq.com,www.cctv.com
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.stream.Collectors;
/**
* Created with IntelliJ IDEA.
* Author: Amos
* E-mail: amos@amoscloud.com
* Date: 2022/8/11
* Time: 15:13
* Description:
*/
public class Main0106 {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
while (scanner.hasNext()) {
solution(scanner.nextLine());
}
}
}
private static final Map<String, Integer> topMap = new HashMap<>();
private static void solution(String line) {
if (line.length() > 2) {
topMap.put(line, topMap.getOrDefault(line, 0) + 1);
} else {
int n = Integer.parseInt(line);
List<Map.Entry<String, Integer>> list = topMap.entrySet()
.stream()
.sorted((e1, e2) -> Integer.compare(e2.getValue(), e1.getValue()))
.collect(Collectors.toList());
for (int i = 0; i < n; i++) {
System.out.print(list.get(i).getKey());
if (i != n - 1) {
System.out.print(",");
}
}
System.out.println();
}
}
}