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