package com.tulin.lock.demo;
import java.util.*;
/**
* User: ldj
* Date: 2023/4/7
* Time: 16:51
* Description: 算法:寻找一组数字出现次数最多的数字
*/
public class MathDemo {
public static void main(String[] args) {
//准备一组测试数据
List<Integer> list = new ArrayList<>();
list.add(3);
list.add(5);
list.add(4);
list.add(5);
list.add(3);
list.add(7);
list.add(8);
list.add(8);
//对源数组去重
List<Integer> distinctList = distinct(list);
System.out.println("去重后的list: " + distinctList);
//计算源数组每个元素出现的次数
int[] result = new int[distinctList.size()];
for (int i = 0; i < distinctList.size(); i++) {
for (Integer integer : list) {
if (distinctList.get(i).equals(integer)) {
result[i] = result[i] + 1;
}
}
}
System.out.println("去重后list中的元素分别出现的次数: " + Arrays.toString(result));
//拷贝数组,然后升序拿到出现次数最大的值
int[] newResult = Arrays.copyOf(result, distinctList.size());
//Arrays.sort(newResult);
//sort(newResult);
//int max = newResult[newResult.length - 1];
int max = Arrays.stream(result).max().getAsInt();
System.out.println("出现次数最多是:" + max + "次");
//因为出现次数最大的值,在result数组中可能出现的次数不止一次,所有还要遍历对比一次
//List<Integer> indexs = new ArrayList<>();
//list用来存索引
list.clear();
for (int i = 0; i < result.length; i++) {
if (result[i] == max) {
list.add(i);
}
}
for (int index : list) {
System.out.println("众数是:" + distinctList.get(index));
}
}
private static List<Integer> distinct(List<Integer> list) {
Set<Integer> set = new HashSet<>(list);
System.out.println(set);
return new ArrayList<Integer>(set);
}
private static void sort(int[] array) {
for (int i = 0; i < array.length - 1; i++) {
for (int j = 1; j < array.length - i; j++) {
if (array[i] > array[i + j]) {
int empty = array[i];
array[i] = array[i + j];
array[i + j] = empty;
}
}
}
System.out.println(Arrays.toString(array));
}
}
(众数) 寻找一组数字中出现次数最多的数
于 2023-06-07 03:48:28 首次发布