查找整型数组里出现频率最高的数字最佳Java实现?<--这是问题
解决方案 »
- 关于乱码的问题:tomcat的默认编码改过了
- 急,在线等!调用ajax,返回json,报异常java.lang.OutOfMemoryError: Java heap space
- 实际问题:整数*(28/30)的问题?求教
- java 16进制运算
- 问个struts2 <s:iterator> 标签的问题
- 谁帮我看看什么地方设置的不对,还是路径不对。
- 点了树后在iframe里加载页面出了问题,变成弹出窗口了,请问问题出在哪儿呢
- 在java中能不能动态地接受源代码,再实时一行一行地运行出来?
- 大家来玩玩!有聊天程序给你!(java)
- 招聘(真实可靠)
- 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]) + "次");