我在牛客网上刷题时遇到了这道题目,因为初学Java不久,对Java的应用还不熟悉,刚开始用C语言做没做出来(我太菜了。。。),接着百度发现竟然可以用HashMap做,仔细一想发现这真是一个好办法(为什么我就想不到!!!),下面是我参考大佬们的代码自己写出来的,附加了个人理解。
import java.util.*;
/**
* 从键盘输入一个数组
* 找出数组中出现次数最多的元素
* @author Administrator
*
*/
public class max_number_Array{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int num = in.nextInt();
int[] data = new int[num];
for(int i=0; i<num; i++) {
data[i] = in.nextInt();
}
Map<Integer,Integer> numMap = new HashMap<Integer,Integer>();
//在Map中存入数组元素;包括某个元素出现的次数
for(int i=0; i<num; i++) {
if(numMap.containsKey(data[i])) {//如果Map中已经有该元素,则其value值加1
int temp = numMap.get(data[i]);
numMap.put(data[i],temp+1);
}else { //如果Map中没有该元素,则添入该元素(这其实就是初始化)
numMap.put(data[i], 1);
}
}
//找出出现次数最多的元素。
Collection<Integer> KeyArray = numMap.values();//存储所有元素出现的次数;
int maxCount = Collections.max(KeyArray);//找出最大的次数,下一步:元素和次数进行匹配;
for(Map.Entry<Integer, Integer> map:numMap.entrySet()) {//通过Entry利用增强for循环遍历上述Map的键值对对象
if(maxCount == map.getValue()) {//获取value值一一匹配
System.out.print("此数组中出现次数最多的元素是:");
System.out.println(map.getKey());//如果匹配成功,输出该value值对应的Key值
}
}
System.out.println("该元素出现的次数是:"+maxCount);
}
}