无聊自己出一些算法题,方便日后工作使用。
题目:
有10个集合,每个集合里有一百个一百以内的随机数字。然后要统计这10个集合中出现次数最多的那个数字,并且按重复次数对这10个集合进行排序。
步骤:
-
生成10个集合,每个集合包含100个0到99或1到100的随机数。
-
统计这10个集合中所有数字的出现次数,找到出现次数最多的那个数字。例如,将所有集合中的数字合并到一个总的统计中,然后找出出现次数最多的那个数字。
-
然后,针对这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、排序集合:根据该数字在每个集合中的出现次数,使用自定义比较器对集合进行降序排序。