搞一条面试题目,求最好的最佳的算法,java

flink58 发布于 2015/05/14 17:19
阅读 289
收藏 0
给你一组50万的字符如{1,3,4,7,2,1,1,5,2,a,b,c,v,c,r,t......................},让你输出里面出现次数最多且数值最大的一个,出现几次
加载中
0
cnDavidChen
cnDavidChen
我想知道50万的字符是保存在哪里,字母的数值是什么?出现最多和数值最大可能有矛盾,出现最多的不一定是数值最大的。
p
publichero
同问
0
我是只呆呆兽
数据结构使用treemap(treemap默认是字符升序),对字符集进行遍历,把字符加到treemap中,以字符为key,出现次数为value的方式加入;如果map中key没有包含该字符,则加入该字符,并且是value为1,如果map中key包含该字符,则使value+1; 遍历字符集完毕后,定义一个字符串key和int类型变量count,key和count初始化为map中的第一个数据,然后对map进行遍历,并且比较map中的value大小,比较完毕后,key中的值就是初始最多的字符,count就是该字符出现的次数 ~~ 就这样 菜鸟一枚
0
innerp
innerp

太简单了吧 

这个是asci码 定义一个255大小的数组array,char转成int ,然后循环那个大数组

0
Cobbage
Cobbage

字母字符的话 定义个按照楼上的 适量的一个数组。

第一遍循环 按照加法处理 0 特殊处理

第二遍 倒序循环 找最多切最大的

0
安西都护府首席程序员
安西都护府首席程序员
//保存你的字符
		char chars[]={'1','3','4','7','2','1','1','5','2','a','b','c','v','c','r','t','5','5'};
		
		//定义一数组用来保存字符出现次数
		int counts[]=new int[255];
		
		//出现次数最多的字符
		char max_char=0;
		
		for (int i = 0; i < chars.length; i++) {
			
			char tmp=chars[i];
			counts[tmp]++;
			if(counts[tmp]>=counts[max_char])
				max_char=tmp;
		}
		System.out.println((char)max_char);



0
逆流de鱼
逆流de鱼
民工方案:将chart数组遍历添加到list集合中,遇到重复值将重复值添加到map集合中,map集合key为重复的字符value是字符出现次数,如果map存在该字符则取其value+1不存在则添加到map中去value默认为2;最后去map里面的values集合转成list集合再用collections做集合排序
0
安西都护府首席程序员
安西都护府首席程序员

引用来自“逆流de鱼”的评论

民工方案:将chart数组遍历添加到list集合中,遇到重复值将重复值添加到map集合中,map集合key为重复的字符value是字符出现次数,如果map存在该字符则取其value+1不存在则添加到map中去value默认为2;最后去map里面的values集合转成list集合再用collections做集合排序
这样的时间复杂度会是多少????
逆流de鱼
逆流de鱼
回复 @最渣的渣男 : 都说了是民工方案了,面试官要的是解决方案先把功能实现再考虑优化
安西都护府首席程序员
安西都护府首席程序员
回复 @逆流de鱼 : 百度吧,你这样写肯定不是最优的算法
逆流de鱼
逆流de鱼
什么是时间复杂度?
返回顶部
顶部