有一个数组,其中有两个数字x,y,找出数组中这两个数字出现次数较多的那个

有一个数组,找出数组中出现次数最多的两个数字

public static void main(String[] args) {
        int[] nums = {1, 3, 2, 1, 3, 2, 4, 3, 4, 4}; // 示例数组
        Map<Integer, Integer> countMap = new HashMap<>();

        // 统计每个数字出现的次数
        for (int num : nums) {
            countMap.put(num, countMap.getOrDefault(num, 0) + 1);
        }

        // 使用优先队列(最大堆)找出出现次数最多的数字
        PriorityQueue<Map.Entry<Integer, Integer>> maxHeap = new PriorityQueue<>(
                (a, b) -> b.getValue() - a.getValue());

        maxHeap.addAll(countMap.entrySet());

        // 如果数组中所有数字都只出现一次,则没有满足条件的数字对
        if (maxHeap.isEmpty()) {
            System.out.println("没有找到出现次数超过一次的数字");
            return;
        }

        // 提取出现次数最多的两个数字
        Map.Entry<Integer, Integer> mostFrequent = maxHeap.poll();
        Map.Entry<Integer, Integer> secondMostFrequent = maxHeap.poll();

        System.out.println("出现次数最多的数字是: " + mostFrequent.getKey()
                + ", 出现了 " + mostFrequent.getValue() + " 次");
        System.out.println("出现次数第二多的数字是: " + secondMostFrequent.getKey()
                + ", 出现了 " + secondMostFrequent.getValue() + " 次");

		// 下面是如果出现了并列的情况
        // 获取最高频率
        int maxFrequency = maxHeap.peek().getValue();

        // 输出所有出现次数最多的数字
        while (!maxHeap.isEmpty() && maxHeap.peek().getValue() == maxFrequency) {
            Map.Entry<Integer, Integer> entry = maxHeap.poll();
            System.out.println("出现次数最多的数字是: " + entry.getKey()
                    + ", 出现了 " + entry.getValue() + " 次");
        }
    }
posted @ 2024-06-27 23:16  fchhk  阅读(1)  评论(0编辑  收藏  举报