面试题: 给你一组字符例如{1,3,4,7,2,1,1,5,2},让你输出里面出现次数最多且数值最大的一个,并算出出现几次 我当时做出来了 可是面试官说我的程序太复杂算法不好 大侠们 帮帮小弟 看能不能写出好一点的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我也问过这道题 是8月中的时候---------用map<the number, 次数> package regulartest;import java.util.*;import java.util.Map.Entry;public class Test { public static void main(String[] args){ int[] num = {5,5,8,5,3,5,3,3,3,1,1,1}; Map<Integer, Integer> map = new HashMap<Integer, Integer>(); for( int i =0 ; i<num.length ;i++){ if(map.containsKey(num[i])){ map.put(num[i], (Integer)map.get(num[i])+1);//如果已经有key--num[1],那么这个put,就会把value值+1覆盖原来的value值 }else{ map.put(num[i], 1); } } Integer max= Integer.MIN_VALUE; Integer max2 = Integer.MIN_VALUE; for( Entry<Integer, Integer> entry : map.entrySet() ) { Integer key = entry.getKey(); Integer value = entry.getValue(); if(value>=max){ max=value; if(key>=max2){ max2=key; } } } for( Entry<Integer, Integer> entry : map.entrySet() ) { Integer key = entry.getKey(); Integer value = entry.getValue(); if(key==max2){ System.out.println("频率最大数"+key+" 频率:"+max); } } }} 为什么要用map?呵呵,先排序再取最大值不就得了,用不着那么复杂public static void main(String[] args) { int[] ch = {1,3,4,7,2,1,7,1,5,2,7}; Arrays.sort(ch); int max = ch[ch.length - 1]; int count = 1; for(int i = ch.length - 2;i >= 0; i--){ if(ch[i] == max){ count++; } else{ break; } } System.out.println("最大值:" + max); System.out.println("最大值个数:" + count); } 楼上,使用排序的算法复杂度和map可不能比啊 我的算法是排序后 HASHMAP不知道有没有更好的 帅哥,你自己看看哪个复杂,map只是在容器类里存取速度比较快而已,面试的时候你写那么一堆东西考官会晕死~Arrays.sort()对原型数组采用的是经过优化过的快速排序算法,平均时间复杂度为n*logn,效率还是比较高的.你可以用工具测下我写的跟你写的哪个更快点撒,呵呵空间复杂度来说,你写的那个MAP的占用空间也太多,MAP对象都是放在堆上的;我写的那个东东(不敢说好哈,呵呵),使用的都是基本类型(数组是条件不算),都是放在栈中的,存取速度也会比堆中的快一些~顺便再提下,LZ说的"让你输出里面出现次数最多中的某一字符数值最大的一个"还没大懂,就你的例子来说你是想输出的出现次数最多中的某一字符数值最大的一个是1? java如何发送自定义事件 谁有java的ngram的分词检索的源代码啊?(没有的话三元分词的源代码也行) java中关于键盘代替按钮的一些问题(是代替)~~~ 送分的问题 想做好这个就辞职,兄弟们帮看一下。 如何用URLConnection请求具有SSL证书的网页? 帮忙解决一下java中的Stringtokenizer和replaceAll 苦恼的问题,郁闷很多天!! 请各位帮我解释一下main java能开发学籍管理系统么? 关于snmp4j中接收trap问题 (匿名内部类) 是否可以extends(继承)其它类
---------
用map<the number, 次数>
package regulartest;import java.util.*;
import java.util.Map.Entry;public class Test { public static void main(String[] args){ int[] num = {5,5,8,5,3,5,3,3,3,1,1,1};
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for( int i =0 ; i<num.length ;i++){
if(map.containsKey(num[i])){
map.put(num[i], (Integer)map.get(num[i])+1);//如果已经有key--num[1],那么这个put,就会把value值+1覆盖原来的value值
}else{
map.put(num[i], 1);
}
}
Integer max= Integer.MIN_VALUE;
Integer max2 = Integer.MIN_VALUE;
for( Entry<Integer, Integer> entry : map.entrySet() ) {
Integer key = entry.getKey();
Integer value = entry.getValue();
if(value>=max){
max=value;
if(key>=max2){
max2=key;
}
}
}
for( Entry<Integer, Integer> entry : map.entrySet() ) {
Integer key = entry.getKey();
Integer value = entry.getValue();
if(key==max2){
System.out.println("频率最大数"+key+" 频率:"+max);
}
} }
}
{
int[] ch = {1,3,4,7,2,1,7,1,5,2,7};
Arrays.sort(ch);
int max = ch[ch.length - 1];
int count = 1;
for(int i = ch.length - 2;i >= 0; i--){
if(ch[i] == max){
count++;
}
else{
break;
}
}
System.out.println("最大值:" + max);
System.out.println("最大值个数:" + count);
}
Arrays.sort()对原型数组采用的是经过优化过的快速排序算法,平均时间复杂度为n*logn,效率还是比较高的.
你可以用工具测下我写的跟你写的哪个更快点撒,呵呵
空间复杂度来说,你写的那个MAP的占用空间也太多,MAP对象都是放在堆上的;我写的那个东东(不敢说好哈,呵呵),使用的都是基本类型(数组是条件不算),都是放在栈中的,存取速度也会比堆中的快一些~顺便再提下,LZ说的"让你输出里面出现次数最多中的某一字符数值最大的一个"还没大懂,就你的例子来说你是想输出的出现次数最多中的某一字符数值最大的一个是1?