新手入门,请大家多多帮忙 查找整型数组里出现频率最高的数字最佳Java实现?<--这是问题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public static void main(String[] args) { int m[] = {1,2,2,3,3,3,4,4,4,4,5,5,5,5,2,5,6,6,6,6,6,6,7,7,7,7,7,7,7,7}; HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(); for(int i = 0; i < m.length ; i++){ int count = 0; int k = i; for(int j = 0; j < m.length; j++){ if(m[i] == m[j]){ count++; } } map.put(m[i], count); } Set<Integer> set = map.keySet(); for(Iterator<Integer> iter = set.iterator(); iter.hasNext(); ){ int key = iter.next(); System.out.println(key + "出现了" + map.get(key) + "次"); } } code=Java]public static void main(String[] args) { int m[] = {1,2,2,3,3,3,4,4,4,4,5,5,5,5,2,5,6,6,6,6,6,6,7,7,7,7,7,7,7,7}; HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(); for(int i = 0; i < m.length ; i++){ int count = 0; int k = i; for(int j = 0; j < m.length; j++){ if(m[i] == m[j]){ count++; } } map.put(m[i], count); } Set<Integer> set = map.keySet(); for(Iterator<Integer> iter = set.iterator(); iter.hasNext(); ){ int key = iter.next(); System.out.println(key + "出现了" + map.get(key) + "次"); } }[/code] 没测试过,不知道是用Map好还是用一个Integer.MAX_VALUE大小的数组好。用数组占的空间是不小,不过速度应该很快,适合统计巨大量整数的情况。 如果按照楼上的办法,用map,效率应该是n*n。 如果是我做,我想到的方法是,把a-Z作为26+26=52的数组a=[0,0,0,0,0,0,0,0,0,0,0...] b=[12,1,2,5,12,2,5,8,5,7]for(int i=0;i<b.length();i++){int c=b[i];a[c]+=1;}所以:a=[0,0,1,0,0,0...],遍历字符串可以得到个数。 再取出就好了。 时间复杂度为n而已,快了一倍,呵呵!~ 不知道有没有更好的办法呢? 补充:楼主要求是出现次数最多的一个数所以可以把for(Iterator <Integer> iter = set.iterator(); iter.hasNext(); ){ int key = iter.next(); System.out.println(key + "出现了" + map.get(key) + "次"); } 换成:Object str[] = set.toArray();Arrays.sort(str);System.out.print(str[str.length-1] + " 出现次数最多," + map.get(str[str.length-1]) + "次"); 初学ext2.0,代码完全不执行 一个EJB的小问题,大哥大姐帮帮看一下,我是小菜鸟一个.. java MQ 问题(急!在线等) 谁能介绍一本JAVA参考书? iText 读 PDF 数据 session.setAttribute( ) 数据存储问题 jvm不允许我new一个对象 使用jdbc访问oracle的一个问题,很棘手 请问能从servlet里往会话ejb里传递一个对象?比如..... 请大哥们明示! Spring FactoryBean的使用 JBOSS为什么不能用EJB3注释部署啊
int m[] = {1,2,2,3,3,3,4,4,4,4,5,5,5,5,2,5,6,6,6,6,6,6,7,7,7,7,7,7,7,7};
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i = 0; i < m.length ; i++){
int count = 0;
int k = i;
for(int j = 0; j < m.length; j++){
if(m[i] == m[j]){
count++;
}
}
map.put(m[i], count);
} Set<Integer> set = map.keySet();
for(Iterator<Integer> iter = set.iterator(); iter.hasNext(); ){
int key = iter.next();
System.out.println(key + "出现了" + map.get(key) + "次");
}
}
public static void main(String[] args) {
int m[] = {1,2,2,3,3,3,4,4,4,4,5,5,5,5,2,5,6,6,6,6,6,6,7,7,7,7,7,7,7,7};
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i = 0; i < m.length ; i++){
int count = 0;
int k = i;
for(int j = 0; j < m.length; j++){
if(m[i] == m[j]){
count++;
}
}
map.put(m[i], count);
}
Set<Integer> set = map.keySet();
for(Iterator<Integer> iter = set.iterator(); iter.hasNext(); ){
int key = iter.next();
System.out.println(key + "出现了" + map.get(key) + "次");
}
}
[/code]
用数组占的空间是不小,不过速度应该很快,适合统计巨大量整数的情况。
如果是我做,我想到的方法是,把a-Z作为26+26=52的数组a=[0,0,0,0,0,0,0,0,0,0,0...]
b=[12,1,2,5,12,2,5,8,5,7]
for(int i=0;i<b.length();i++){
int c=b[i];
a[c]+=1;
}
所以:a=[0,0,1,0,0,0...],遍历字符串可以得到个数。
再取出就好了。
时间复杂度为n而已,快了一倍,呵呵!~ 不知道有没有更好的办法呢?
for(Iterator <Integer> iter = set.iterator(); iter.hasNext(); ){
int key = iter.next();
System.out.println(key + "出现了" + map.get(key) + "次");
}
换成:Object str[] = set.toArray();
Arrays.sort(str);
System.out.print(str[str.length-1] + " 出现次数最多," + map.get(str[str.length-1]) + "次");