【LeetCode】多数元素 II [M](摩尔投票)
admin
2024-03-14 00:33:04
0

229. 多数元素 II - 力扣(LeetCode)

一、题目

给定一个大小为 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。

示例 1:

输入:nums = [3,2,3]
输出:[3]

示例 2:​​​​​​​

输入:nums = [1]
输出:[1]

示例 3:​​​​​​​

输入:nums = [1,2]
输出:[1,2]

提示:

  • 1 <= nums.length <= 5 * 104
  • -109 <= nums[i] <= 109

二、代码

class Solution {public List majorityElement(int[] nums) {HashMap cntMap = new HashMap<>();int n = nums.length;List ans = new ArrayList();int k = 3;for (int i = 0; i < n; i++) {// 候选表中存在nums[i]if (cntMap.containsKey(nums[i])) {// 直接将该值的血量++int value = cntMap.get(nums[i]);cntMap.put(nums[i], value + 1);// 候选表中不存在nums[i]} else {// 当前Map表还没有满,就将nums[i]加入到Map候选表中,作为候选值if (cntMap.size() < k - 1) {cntMap.put(nums[i], 1);// 当前Map表已经满了,就将表中所有候选值的血量减1,然后如果剪到0的从Map中移除} else {// 使用迭代器边遍历,边移除才不会报错Iterator> iterator = cntMap.entrySet().iterator();while (iterator.hasNext()) {Map.Entry entry = iterator.next();int key = entry.getKey();int value = entry.getValue();if (--value == 0) {iterator.remove();} else {cntMap.put(key, value);}}}}}// 如果没有候选值,就说明这个表里面没有次品为n/k的数if (cntMap.size() == 0) {return ans;}// 找到候选值,去遍历数组来确定他们的真实词频,然后判断是否超过了n/k次,超过了就加入到ansfor (Map.Entry entry : cntMap.entrySet()) {int key = entry.getKey();int cnt = 0;for (int i = 0; i < n; i++) {if (nums[i] == key) {cnt++;}}if (cnt > n / k) {ans.add(key);}}   return ans;}
}

三、解题思路 

上面的代码写的是通用解,可以找到数组中所有词频大于n/k的值。

通过遍历数组,维护候选值和对应的血量,只要最后又剩下的候选值,就说明有可能存在词频大于n/k的数,然后在数组中遍历一下候选值,统计他们的真实词频,看是否大于n/k,是的话就加入到ans中。

维护规则:

  • 遍历数组时碰到了候选值,就将这个候选值对应的血量++。
  • 如果此时有表还没有满,并且遍历到的数不是候选值,就将这个数加入到表中作为一个候选值。
  • 如果此时候选值表已经满了,遍历到的数又不是候选值,那么就将表中所有的候选值血量--,如果出现血量为0的,就将这个候选值从表中删除。

相关内容

热门资讯

一日为师终身为父,郭德纲为什么... 一日为师终身为父,郭德纲为什么不认杨志刚?第一件事是杨志刚对于郭德纲徒弟身份模棱两可的说法。杨志刚不...
我是女生,22岁参加工作,早吗... 我是女生,22岁参加工作,早吗?不早。。我工作时才18岁。。。不早了。本科出来正好22岁。要是继续考...
老婆紧紧抱白自己是什么意思 老婆紧紧抱白自己是什么意思在恋爱中男女拥抱是件很正常的事,但拥抱太紧的时候意味着什么呢?首先我们先了...
罗念生龙灯内容概括? 罗念生龙灯内容概括?罗念生的龙灯这篇文章当中所有的线索都是看耍龙灯,他们从小的时候看,长大了之后看是...
动漫东东帐号 动漫东东帐号账号:炎发秘密:7891****6
宝马3系刹停和松开异响是怎么回... 宝马3系刹停和松开异响是怎么回事?宝马三系刹车和松开异响是怎么回事儿?我们可以检查一下是否缺刹车油造...
秋季草丛里有什么昆虫在白天叫? 秋季草丛里有什么昆虫在白天叫?秋季草丛里面有什么昆虫在白天叫秋季草丛里面有很多昆虫是白天叫的。这种虫...
偷鸡贼与鸡的故事 偷鸡贼与鸡的故事偷鸡贼与鸡的故事这个是黄鼠狼给鸡拜年,不按好心偷鸡不成蚀把米
求《花火》美文 求《花火》美文......
逝去的诺言,南山南,一生所爱,... 逝去的诺言,南山南,一生所爱,喜欢听这几首歌的人,是种什么心里?想有一段荡气回肠的情感历程虽然我不是...
如果的关联词 如果的关联词如果的关联词为以下三个1.如果……就…… 2.如果……那么…… 3.如果……也……
学医好找工作吗?工资怎样? 学医好找工作吗?工资怎样?定考研找医院待遇
有的时候听见电话叮叮的铃声 有的时候听见电话叮叮的铃声有的时候听见电话叮叮的铃声,这是怎么回事呢:需要医生帮助提供远程诊断: 请...
《死神》中斩魄刀名为“村正”的... 《死神》中斩魄刀名为“村正”的刀是谁的?很邪恶!!传说是剑八地,因为死神队长就他还没出现,而且那个村...
你们相信永恒的爱吗?,说一下理... 你们相信永恒的爱吗?,说一下理由我相信永恒的爱,但是不相信永恒的爱情.我和老婆交往了7年,现在结婚了...
新东方教育的考研辅导怎么样啊 新东方教育的考研辅导怎么样啊相比其他辅导班,可信度是比较高的,老师的信息也是真实的,不像其他辅导班,...
太极印和子午印一样吗 太极印和子午印一样吗手结太极印,也就是双手相握,虎口交叉,右手大拇指掐住左手无名指根,左手大拇指掐住...
想学钢琴请问宜兴金三角附近有琴... 想学钢琴请问宜兴金三角附近有琴行吗可以 绝对不是问题 20岁人生才起步 一点也不晚的 音乐这东西学了...
古对今,从前对什么? 古对今,从前对什么?对仗,从前对什么?中间对什么?你好按照你描述的问题是古对今,从前对以后。希望这个...
带娃去黄山玩5天大概花费多少钱... 黄山,这座屹立于皖南大地的奇峰峻岭,宛如一幅流动的山水画卷,自古以来便吸引着无数文人墨客为之倾倒。它...