首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

求在N个数组中出现次数最多的无素解决思路

2012-02-26 
求在N个数组中出现次数最多的无素现在有N个数组,每个数组中都有大量的int型元素,但每一个无素值只会出现一

求在N个数组中出现次数最多的无素
现在有N个数组,每个数组中都有大量的int型元素,但每一个无素值只会出现一次
现在希望能找出在N个数组中出现次数最多的元素值

E.g.a[] = {1,2,3,4,5,6};
  b[] = {4,5,6};
  c[] = {5};
  d[] = {1};

那么应该返回5,因为它出现了3次。

讲明思想就可以,如果只给出代码,最好是C类代码或是java

[解决办法]

探讨
引用:
遍历每个数组,以每个int值为map的键名,键值为出现的次数,最后再在map中找到最大键值的键名。

效率可能不是很高,实现简单,根据实际情况选择使用,呵呵。期待高效算法。

这个方法的基础上改一下。每次修改值时就作一个判断,记录下当前出现次数最多的数字。
这样只需要遍历一次数组就行了。不用再遍历哈希表找出值最大的了。

我觉得要找出次数最多的必须要遍历数组才行。

另外:还有一个问题就是,如果出现多个元素都是一样的出现次数的情况下,是只需要一个还是所有都要?
如果所有都要的话,还是得楼上的方法。
如果只要一个的话,还可以把遍历的方式改为从每个数组第一个开始,所有的第一个元素都遍历完后再遍历第二个元素(类似于广度优先的方法),一但出现次数与数组数目相同的数(也就是每个数组中都出现过了的数),则直接返回此数。

[解决办法]
我的想法:
1:首先对N个数组按照从小到大的顺序进行排序
2:然后设立N个index(1..N)
3:每次扫描,在data[1]..data[N]中找到一个最小的数,并统计这个最小数的个数是多少
4:如果这个最小数的个数已经达到N个 那肯定是最多的 或者剩下的组数(因为随着扫描的进行,有些组数可能已经扫描结束)已经都比得到的ans大,那也没必要继续往下找了(这里是个优化)
5:对所有data[index]的值等于这次最小值的 index都自增一个
6:直到所有的index扫描结束

热点排行