算法:求一组数字中的众数及其出现的次数

    科技2022-07-21  96

    一、算法思路:

    对于众数的求解,对原始的数据应该先进行排序工作,这样会大幅度提高后续的计数工作效率,不用反复地遍历所有数据,只需要一遍就可以完成计数工作,在计数的同时就可以进行比较工作,记录下众数的所在位置及其出现的次数。

    Start 获取数据,并将其存储在数组array中 借助sort函数对于array中的原始数据进行排序 Loop(遍历整个数组array){ 判断当前元素与上一个元素是否相等 If yes{ 利用变量s记录下当前元素的值 将计数变量count置为1 } Else{ 计数变量count++; } 判断当前数值出现的次数是否为最多 If yes{ 将用于记录最多次数的变量max_count的值置为count 将用于记录数值位置下标的变量max_flag的值更新 } } 最后输出array[max_flag]和max_count的值 End

     

    二、代码求解:

    import java.util.Arrays; import java.util.Scanner; public class MyMode { public static void main(String[] args) { //获取数据的个数 int n; System.out.println("请输入你想输入的数字个数:"); Scanner scanner = new Scanner(System.in); n = scanner.nextInt(); //接收数据 System.out.println("输入数据:"); int[] array = new int[n]; for (int i=0;i<n;i++) array[i] = scanner.nextInt(); //对输入的数据进行排序,便于后面的计数 Arrays.sort(array); //进行排查 int max_flag = 0;//用于记录众数的下标 int max_count = 0;//用于记录数字的出现最大次数 int count = 0;//用于记录数据出现的次数,和max进行比较 int s = array[0];//用于辅助判断数组元素是否相同 for (int i=0;i<n;i++) { //当前元素和上一个元素进行比较 if(array[i]!=s) { s = array[i]; count = 1; }else { count++; } //进行比较 if(count>max_count) { max_count = count; max_flag = i; } }//循环 System.out.println("众数为:"+array[max_flag]+"出现的次数为:"+max_count); } }

    Ending... ...

    Processed: 0.011, SQL: 8