【正确答案】
【答案解析】问题描述:对于数组{1,1,2,2,4,4,4,4,5,5,6,6,6},元素1出现的次数为2次,元素2出现的次数为2次,元素4出现的次数为4次,元素5出现的次数为2次,元素6出现的次数为3次,找出数组中出现重复次数最多的数。
上述问题中,程序的输出应该为元素4。
可以采取如下两种方法来计算数组中重复次数最多的数。
方法一:空间换时间。可以定义一个数组int count[MAX],并将其数组元素都初始化为0,然后执行for(int i=0; i<100; i++)count[A[i]]++操作,在count数组中找最大的数,即为重复次数最多的数。这是一种典型的空间换时间的算法。一般情况下,除非内存空间足够大,一般不采用这种方法。
方法二:使用Map映射表。通过引入Map映射表(Map提供一对一的数据处理能力,其中第一个为关键字,每个关键字只能在Map中出现一次,第二个称为该关键字的值)来记录每一个元素出现的次数,然后判断次数大小,进而找出重复次数最多的元素。示例如下:
import java.util.*;
public class Test{
public static int findMostFrequentInArray(int[]a){
int result=0;
int size=a.length;
if(size==0)
return Integer.MAX_VALUE;
//记录每个元素出现的次数
Map<Integer, Integer>m=new HashMap<Integer, Integer>();
for(int i=0; i<size; i++){
if(m.containsKey(a[i])){
m.put(a[i], m.get(a[i])+1);
}
else{
m.put(a[i], 1);
}
}
//找出出现次数最多的元素
int most=0;
Iterator iter=m.entrySet().iterator();
while(iter.hasNext()){
Map.Entry entry==(Map.Entry)iter.next();
int key=(Integer)entry.getKey();
int val=(Integer)entry.getValue();
if(val>most){
result=key;
most=val;
}
}
return result;
}
public static void main(Stnng[]args){
int array[]={1, 5, 4, 3, 4, 4, 5, 4, 5, 5, 6, 6, 6, 6, 6};
int maxFrequenceNum=findMostFrequentInArray(array);
System.out.println(maxFrequenceNum);
}
}
程序运行结果为:
6