java解法

统计输入中每个URL的出现次数:
使用 TreeMap 存储URL及其出现次数,保证按字典序自动排序。
处理用户输入:
如果输入为数字 n,输出前 n 个出现次数最多的URL。
如果输入为URL,更新URL的统计次数。
排序规则:
出现次数按降序排序。
若出现次数相同,按字典序升序排序。
优先队列实现排序:
使用 PriorityQueue 实现排序,以满足自定义排序规则。
程序通过不断接收输入处理数据,直到输入结束

import java.util.*;

public class Main {
    // 使用 TreeMap 存储 URL 和其统计次数,按字典序自动排序
    static Map<String, Integer> urlCount = new TreeMap<>();
    // 优先队列,用于按规则排序输出前 n 个 URL
    static PriorityQueue<Map.Entry<String, Integer>> pq;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // 持续接收输入,直到没有更多输入(EOF)
        while (sc.hasNextLine()) {
            String input = sc.nextLine();

            // 判断输入是否为数字
            if (isNumeric(input)) {
                // 输入为数字,解析为 n,并输出前 n 个 URL
                int n = Integer.parseInt(input);
                System.out.println(getTopN(n));
            } else {
                // 输入为 URL,更新其统计次数
                urlCount.put(input, urlCount.getOrDefault(input, 0) + 1);
            }
        }
    }

    /**
     * 获取出现次数最多的前 n 个 URL,按规则排序
     * @param n 要输出的 URL 个数
     * @return 按规则排序的前 n 个 URL,逗号分隔
     */
    private static String getTopN(int n) {
        // 初始化优先队列,按规则排序:
        // 1. 出现次数降序;
        // 2. 出现次数相同时,按字典序升序。
        pq = new PriorityQueue<>((a, b) -> {
            if (!a.getValue().equals(b.getValue())) {
                return b.getValue() - a.getValue(); // 出现次数降序
            } else {
                return a.getKey().compareTo(b.getKey()); // 字典序升序
            }
        });

        // 将所有 URL 的统计数据加入优先队列
        pq.addAll(urlCount.entrySet());

        // 使用 StringJoiner 拼接结果字符串
        StringJoiner sj = new StringJoiner(",");
        for (int i = 0; i < n && !pq.isEmpty(); i++) {
            // 获取优先队列中当前出现次数最多的 URL
            sj.add(pq.poll().getKey());
        }

        return sj.toString();
    }

    /**
     * 判断输入字符串是否为数字
     * @param str 输入字符串
     * @return true 如果字符串是数字,否则返回 false
     */
    private static boolean isNumeric(String str) {
        try {
            Integer.parseInt(str);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }
}

 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

C++解法

更新中
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

C解法

更新中
 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

JS解法

统计输入中每个 URL 的访问次数:
使用对象(urlVisits)记录 URL 的访问次数。
处理用户输入:
如果输入是一个数字 n,则输出访问次数最多的前 n 个 URL。
如果输入是一个 URL,则更新其访问次数。
排序规则:
访问次数按降序排序;
访问次数相同时,按字典序升序排序。
动态输入读取:
使用 readline 模块异步读取标准输入。
每次读取一行后判断输入类型并处理

const readline = require("readline").createInterface({ input: process.stdin }); // 创建 readline 接口,用于异步读取标准输入
const iterator = readline[Symbol.asyncIterator](); // 获取异步迭代器以逐行读取输入
const getInput = async () => (await iterator.next()).value; // 异步获取一行输入

(async function () {
    const urlVisits = {}; // 使用对象存储 URL 及其访问次数,键为 URL,值为访问次数

    while ((input = await getInput())) {
        const number = parseInt(input); // 尝试将输入解析为数字

        if (isNaN(number)) { // 如果输入不是数字
            // 将输入视为 URL,更新其访问次数
            urlVisits[input] = (urlVisits[input] ?? 0) + 1;
            continue; // 跳过当前循环,继续读取下一个输入
        }

        // 如果输入是数字,获取访问次数最多的前 number 个 URL
        const result = Object.entries(urlVisits) // 将 urlVisits 对象转为 [key, value] 的数组
            .sort(
                (first, second) =>
                    second[1] - first[1] || first[0].localeCompare(second[0]) // 按规则排序
            )
            .slice(0, number) // 截取前 number 个
            .map((item) => item[0]) // 提取 URL
            .join(","); // 将结果拼接为逗号分隔的字符串

        console.log(result); // 输出结果
    }
})();

 class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">

注意:

如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏

注:本文转载自blog.csdn.net的CodeClimb的文章"https://blog.csdn.net/CodeClimb/article/details/145052043"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接

评论记录:

未查询到任何数据!