一个数组中有N个元素,找出其中重复次数最多的那个元素? JAVA LIST 集合

一个数组中有N个元素,找出其中重复次数最多的那个元素?原来的问题的假设条件是***没有重复次数相同的两个不同元素***,例如{1,1,2,2,4,4,4,4,5,5,6,6,6},就是要找出4,之前很感谢guoshanhe提供的算法,虽然不一定是最好的,但是对于我却是实用的。
但是我现在得到的原始数组中***存在重复次数相同的两个不同元素***,例如{1,1,2,2,2,3,3,3,4,4,4},这样的话就需要把2,3,4都找出来。这样的话,guoshanhe提供的算法就不是很好了。并且数组中的情况是不确定的,也有可能是{1,1,1,2,2,3,3,3},所以算法要有一定的通用性
如果LIst里面存储的是 对象,那么应该怎么找到重复次数最多的对象,

第1个回答  2011-12-12
我是这样想的:你可以设置一个计数的int变量,依次检查数组中的数没遇到相等的就++;然后和前一个比较完的计数值比较,大于保留,小于舍去,最后需要的是计数值最大所对应的那个值。
第2个回答  2011-12-10
import java.util.HashSet;
import java.util.Set;
import java.util.List;
import java.util.ArrayList;

public class TestJ {

public static void main(String[] args) {
/*List<Object> list = new ArrayList<Object>();
list.add(....);
list.add(....); .....
Object[] obj1 = list.toArray();*/
//以上注释部分代码意思是:可以自己给list中加入元素,然后赋给数组obj1
Object[] obj1 = {1,1,2,2,2,3,3,3,4,4,4};
//这里用你给的这个数组简单测试一下。
//Object数组中存放对象,
Set<Object> s = new HashSet<Object>();//HashSet用来去掉重复
for(Object o:obj1){
s.add(o);
} //现在的集合s中无重复的包含obj1中的所有元素
Object[] obj2 = s.toArray();//把集合s中的元素存入数组obj2中
int[] n = new int[obj2.length];//这个数组用来存放每一个元素出现的次数
int max = 0;
for(int i=0;i<obj2.length;i++){
int cout = 0;
for(int j=0;j<obj1.length;j++){
if(obj2[i].equals(obj1[j]))cout++;
//用obj2中的元素跟obj1中的每一个比较,如果相同cout自增
}
n[i] = cout;//每一个元素出现的次数存入数组n
//数组n的下标i跟数组obj2的下标是一一对应的。
if(max<cout){//得到元素出现次数最多是多少次
max = cout;
}
}
for(int i=0;i<n.length;i++){
if(max==n[i]){
/ /如果出现的次数等于最大次数,就输出对应数组obj2中的元素
System.out.println(obj2[i]);
}
}
}
}
输出结果; 2 3 4本回答被提问者采纳
相似回答