229、求众数II

1、使用字典

遍历列表,将每个不同的元素存入字典,如果已经在字典中,则加1;最后判断哪个元素的次数大于n/3。

代码

class Solution:
    def majorityElement(self, nums: List[int]) -> List[int]:
        total_dict = {}
        length = len(nums)
        for i in range(length):
            if nums[i] in total_dict:
                total_dict[nums[i]] = total_dict.get(nums[i]) + 1
            else:
                total_dict[nums[i]] = 1
        return [key for key, val in total_dict.items() if val > length//3]

2、摩根投票

摩根投票的本质是抵消,即不同元素的抵消。大于n/3的元素最多有两个,我们可以反过来想,如果有3个次数大于n/3的元素,那么总次数就大于n了,与事实矛盾。

遍历列表中的元素,分别用ele1,ele2代表不同的元素,如果再来一个不同的元素,则抵消;直到最后,剩下的元素即为有可能次数大于n/3的元素。

再次遍历列表,统计上述过程中剩余元素的次数,如果大于n/3,即为结果。

代码

class Solution:
    def majorityElement(self, nums: List[int]) -> List[int]:
        result = []
        ele1,ele2 = 0,0
        vote1, vote2 = 0,0

        for num in nums:
            if vote1>0 and num==ele1:
                vote1 += 1
            elif vote2>0 and num == ele2:
                vote2 += 1
            elif vote1 == 0:
                ele1 = num
                vote1 += 1
            elif vote2 == 0:
                ele2 = num
                vote2 += 1
            else:
                vote1 -= 1
                vote2 -= 1

        total_ele1,total_ele2 = 0,0
        for num in nums:
            if num == ele1:
                total_ele1 += 1
            elif num == ele2:
                total_ele2 += 1

        if total_ele1 > len(nums)//3:
            result.append(ele1)
        if total_ele2 > len(nums)//3:
            result.append(ele2)
        return result


链接:https://leetcode-cn.com/problems/majority-element-ii/solution/229-qiu-zhong-shu-ii-by-senlindu-194i/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值