请教怎么找出数组中出现次数最多的元素

时间:2022-09-19 11:06:12
最近总是碰到类似的问题,总感觉没有一个比较简单的办法,希望大家多多帮忙啦!!
我的想法是,利用map,key为某个元素出现的次数,value为对应的元素!!但是如果有次数相同的元素,这个方法就不好使了!!
还有个想法是,放到list里面,然后排序,感觉也不大很好!!
以int数组为例!!

10 个解决方案

#1


先排序,相同必相邻,求最长相同子串,SE区有帖子讨论过这个问题了,找找看~

#2


把数组中的元素循环,与字符串空做INDEXOF,如果没有就添加一个MAP KEY为数组中的元素 VALUE为次数,另字符串+数组中的元素+“,”  每次没找到就添加一个,找到了就把VALUE的值加一,这样应该好些吧

#3


引用楼主 suixinsuoyu12519 的回复:
最近总是碰到类似的问题,总感觉没有一个比较简单的办法,希望大家多多帮忙啦!!
我的想法是, 利用map,key为某个元素出现的次数,value为对应的元素!!但是如果有次数相同的元素,这个方法就不好使了!!
还有个想法是,放到list里面,然后排序,感觉也不大很好!!
以int数组为例!!

你为什么不是把 key 为某个元素, value 为出现的次数呢

#4


如果数字限定范围,范围小的话,建议用两个数组来用,这样速度非常快。 如:int[]a={1,1,2,3,3,4,4}
                  第二个数组就有5个长度  int[]b=new int[5];
               for(int i=0;i<a.length;i++){
                    b[a[i]]++;
                }
        这样你在算出b数组中哪个最数最大,那么他的下标就是a数组中出现 最多次数的数了

#5


引用 3 楼 keeya0416 的回复:
引用楼主 suixinsuoyu12519 的回复:
最近总是碰到类似的问题,总感觉没有一个比较简单的办法,希望大家多多帮忙啦!!
我的想法是,利用map,key为某个元素出现的次数,value为对应的元素!!但是如果有次数相同的元素,这个方法就不好使了!!
还有个想法是,放到list里面,然后排序,感觉也不大很好!!
以int数组为例!!

你为什么不是把 key 为某个元素, value 为出现的次数呢

恩,恩,这样就可以了,只要key有了,就把value加一,这样就可以了吧。

#6


引用 4 楼 chenliuyang 的回复:
如果数字限定范围,范围小的话,建议用两个数组来用,这样速度非常快。 如:int[]a={1,1,2,3,3,4,4}
第二个数组就有5个长度 int[]b=new int[5];
for(int i=0;i<a.length;i++){
b[a[i]]++;
}
这样你在算出b数组中哪个最数最大,那么他的下标就是a数组中出现 最多次数的数了

这个方法也可以,不过 int[] a = {1,1,3,4,5,6,6,5,1099785};就麻烦了
数组b就浪费很多空间了

#7


说了范围小时候 用吗

#8


解决不知道长度
 可以再做for循环 查找是否和前面的相同 相同则不新加 数组元素
不过查询浪费时间

#9


嗯  谢谢大家的回复 看来里面高手很多啊 开阔了我的思维了 我总是感觉自己编程转不过弯来 嗨 尤其是这种问题 我也不知道自己怎么回事,感觉脑袋转不动 哈哈 最近闲 正在找题目锻炼我的大脑袋呢!!

#10


同样,~~~~~~~~~~~~~~

#1


先排序,相同必相邻,求最长相同子串,SE区有帖子讨论过这个问题了,找找看~

#2


把数组中的元素循环,与字符串空做INDEXOF,如果没有就添加一个MAP KEY为数组中的元素 VALUE为次数,另字符串+数组中的元素+“,”  每次没找到就添加一个,找到了就把VALUE的值加一,这样应该好些吧

#3


引用楼主 suixinsuoyu12519 的回复:
最近总是碰到类似的问题,总感觉没有一个比较简单的办法,希望大家多多帮忙啦!!
我的想法是, 利用map,key为某个元素出现的次数,value为对应的元素!!但是如果有次数相同的元素,这个方法就不好使了!!
还有个想法是,放到list里面,然后排序,感觉也不大很好!!
以int数组为例!!

你为什么不是把 key 为某个元素, value 为出现的次数呢

#4


如果数字限定范围,范围小的话,建议用两个数组来用,这样速度非常快。 如:int[]a={1,1,2,3,3,4,4}
                  第二个数组就有5个长度  int[]b=new int[5];
               for(int i=0;i<a.length;i++){
                    b[a[i]]++;
                }
        这样你在算出b数组中哪个最数最大,那么他的下标就是a数组中出现 最多次数的数了

#5


引用 3 楼 keeya0416 的回复:
引用楼主 suixinsuoyu12519 的回复:
最近总是碰到类似的问题,总感觉没有一个比较简单的办法,希望大家多多帮忙啦!!
我的想法是,利用map,key为某个元素出现的次数,value为对应的元素!!但是如果有次数相同的元素,这个方法就不好使了!!
还有个想法是,放到list里面,然后排序,感觉也不大很好!!
以int数组为例!!

你为什么不是把 key 为某个元素, value 为出现的次数呢

恩,恩,这样就可以了,只要key有了,就把value加一,这样就可以了吧。

#6


引用 4 楼 chenliuyang 的回复:
如果数字限定范围,范围小的话,建议用两个数组来用,这样速度非常快。 如:int[]a={1,1,2,3,3,4,4}
第二个数组就有5个长度 int[]b=new int[5];
for(int i=0;i<a.length;i++){
b[a[i]]++;
}
这样你在算出b数组中哪个最数最大,那么他的下标就是a数组中出现 最多次数的数了

这个方法也可以,不过 int[] a = {1,1,3,4,5,6,6,5,1099785};就麻烦了
数组b就浪费很多空间了

#7


说了范围小时候 用吗

#8


解决不知道长度
 可以再做for循环 查找是否和前面的相同 相同则不新加 数组元素
不过查询浪费时间

#9


嗯  谢谢大家的回复 看来里面高手很多啊 开阔了我的思维了 我总是感觉自己编程转不过弯来 嗨 尤其是这种问题 我也不知道自己怎么回事,感觉脑袋转不动 哈哈 最近闲 正在找题目锻炼我的大脑袋呢!!

#10


同样,~~~~~~~~~~~~~~