随机取最值并排序算法

发布于:2025-02-25 ⋅ 阅读:(17) ⋅ 点赞:(0)

无聊自己出一些算法题,方便日后工作使用。
在这里插入图片描述

题目:

有10个集合,每个集合里有一百个一百以内的随机数字。然后要统计这10个集合中出现次数最多的那个数字,并且按重复次数对这10个集合进行排序。

步骤:

  1. 生成10个集合,每个集合包含100个0到99或1到100的随机数。

  2. 统计这10个集合中所有数字的出现次数,找到出现次数最多的那个数字。例如,将所有集合中的数字合并到一个总的统计中,然后找出出现次数最多的那个数字。

  3. 然后,针对这10个集合中的每一个,统计该数字在每个集合中的出现次数。根据这个次数对这10个集合进行排序。

代码实现:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        // 生成10个包含100个随机数的集合
        List<List<Integer>> lists = generateLists();
        
        // 统计所有数字的总出现次数
        Map<Integer, Integer> totalCounts = getTotalCounts(lists);
        
        // 找出出现次数最多的数字
        int maxNumber = findMaxNumber(totalCounts);
        System.out.println("出现次数最多的数字: " + maxNumber);
        
        // 根据该数字的出现次数对集合进行排序
        sortListsByCount(lists, maxNumber);
        
        // 输出排序结果
        System.out.println("\n排序后的集合(按出现次数降序):");
        for (List<Integer> list : lists) {
            int count = Collections.frequency(list, maxNumber);
            System.out.println("出现次数: " + count + ", 集合: " + list);
        }
    }

    // 生成10个集合,每个集合100个0-99的随机数
    private static List<List<Integer>> generateLists() {
        Random random = new Random();
        List<List<Integer>> lists = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            List<Integer> list = new ArrayList<>();
            for (int j = 0; j < 100; j++) {
                list.add(random.nextInt(100));
            }
            lists.add(list);
        }
        return lists;
    }

    // 统计所有数字的总出现次数
    private static Map<Integer, Integer> getTotalCounts(List<List<Integer>> lists) {
        Map<Integer, Integer> counts = new HashMap<>();
        for (List<Integer> list : lists) {
            for (Integer num : list) {
                counts.put(num, counts.getOrDefault(num, 0) + 1);
            }
        }
        return counts;
    }

    // 找出出现次数最多的数字(次数相同时取数值较大的)
    private static int findMaxNumber(Map<Integer, Integer> counts) {
        int maxCount = -1;
        int maxNumber = -1;
        for (Map.Entry<Integer, Integer> entry : counts.entrySet()) {
            if (entry.getValue() > maxCount || 
                (entry.getValue() == maxCount && entry.getKey() > maxNumber)) {
                maxCount = entry.getValue();
                maxNumber = entry.getKey();
            }
        }
        return maxNumber;
    }

    // 根据指定数字的出现次数对集合进行降序排序
    private static void sortListsByCount(List<List<Integer>> lists, final int targetNumber) {
        lists.sort((list1, list2) -> {
            int count1 = Collections.frequency(list1, targetNumber);
            int count2 = Collections.frequency(list2, targetNumber);
            return Integer.compare(count2, count1); // 降序排列
        });
    }
}

代码说明:

1、生成随机集合:使用Random类生成10个集合,每个集合包含100个0-99的随机数。

2、统计总次数:使用HashMap合并统计所有集合中每个数字的出现次数。

3、找出最多数字:遍历统计结果,找到出现次数最多的数字(次数相同时取数值较大的)。

4、排序集合:根据该数字在每个集合中的出现次数,使用自定义比较器对集合进行降序排序。


网站公告

今日签到

点亮在社区的每一天
去签到