//经过IDEA运行测试通过
import java.util.;
/
* 思路:
* 1.先对元素进行从小到大的排序
* 2.从第一个元素开始遍历,看他后面有几个与他相等的
* 3.用count变量记录当前元素总共出现几次,max变量记录最大次数,map记录最大次数对应的值
* 4.如果次数大于或等于最大次数,则更新最大次数,并把当前值和最大次数压到map中(因为要考虑到多个数出现的次数一样是要全部输出)
* 5.从map中查找value值==max的数输出
/
public class modes{
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.print(“请输入数据个数:”);
int count=in.nextInt(); //输入数字个数
ArrayList arrayList=new ArrayList();
int a;
System.out.print(“请输入数据:”);
while ( (count–)>0 ){ //输入数据
a=in.nextInt();
arrayList.add(a);
}
showFun(arrayList);
}
public static void showFun(ArrayList arrayList) {//此算法时间复杂度为O(n)
Collections.sort(arrayList); //数组排序
int max = 1;//最大次数
Map map = new HashMap<>(); //存放:当有多个数出现次数相等时
for ( int i = 0; i < arrayList.size(); i++ ) {
int count = 1;
for ( int j = i + 1; j < arrayList.size() && arrayList.get(i) == arrayList.get(j); j++ ) { //判断是否等于上一个数和数组是否越界,减少遍历次数
count++;
}
if ( count >=max ) { //每次内循环遍历完成时,将值存入map中
max = count;
map.put(arrayList.get(i), count);
}
}
for ( Object key : map.keySet() ) { //遍历map 当count==max时 即为出现的最大次数
if ( max == (int) map.get(key) ) {
System.out.println("maxNum=" + key + " count=" + max);
}
}
}
}