标签:面试题
找出数组里出现频率最高的元素
个人信息:就读于燕大本科软件工程专业 目前大三;
本人博客:google搜索“cqs_2012”即可;
个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献;
博客内容:水贴王问题之续
博客时间:2014-5-12;
编程语言:Java ;
编程坏境:Windows 7 专业版 x64;
编程工具:jdk,eclipse x64;
制图工具:office 2007 powerpoint;
硬件信息:7G-3 笔记本;
真言:
痛苦的活着比死了更好。
题目:
找出数组里出现频率最高的元素。
思路:
利用哈希表统计元素的数目。
哈希表数据结构如下
举例:
平均时间复杂度O(N)
空间复杂度O(N)
实验:
实验1
int[] data ={1,1,2,2,2};
注释 元素2出现了三次。
实验2
int[] data ={1,1,2,2};
注释 元素1出现了2次(当然2也出现了两次,没有求出所有的是不足之处,我暂且只求了其中一个)
代码:
piar.java
package test; public class pair { public int first; public int second; pair() { first = second = -1; } }
test.java
package test; public class test { private static final int size = 100 ; public static void main(String[] args) { int[] data ={1,1,2,2}; System.out.println(_Find_most_elem(data).first+" "+_Find_most_elem(data).second); } static pair _Find_most_elem(int[] data) { int[][] hash = new int[data.length][2]; int it_hash = 0; pair result = new pair(); for(int i=0;i<data.length;i++) { // find firstly if( hash[ data[i] % data.length ][0] == data[i] ) { hash[ data[i] % data.length ][1] ++ ; } // find secondly else { it_hash = data[i] % data.length; while(hash[ it_hash ][0] != data[i] && hash[it_hash ][1] != 0) { it_hash = (it_hash+1) % data.length ; } if( hash[ it_hash ][1] == 0 ) hash[ it_hash ][0] = data[i]; hash[ it_hash ][1] ++; } } // find most elem it_hash = 0; for(int i=1;i<data.length;i++) { if( hash[i][1] > hash[it_hash][1] ) it_hash = i ; } if(hash[it_hash][1] != 0) { result.first = hash[it_hash][0]; result.second = hash[it_hash][1]; } return result ; } }
水贴王之续,找出数组里出现频率最高的元素,布布扣,bubuko.com
标签:面试题
原文地址:http://blog.csdn.net/cqs_experiment/article/details/25596005