2021-10-22 LeetCode229-求众数II(每日一题)

博客探讨了如何使用摩尔投票法解决LeetCode229题,该方法通过元素对拼内耗来减少数组元素,找到数量大于数组长度三分之一的众数。解题思路包括常规哈希表解法和优化后的摩尔投票法,后者具有O(n)的时间复杂度和O(1)的空间复杂度。
摘要由CSDN通过智能技术生成

常规思路是遍历数组,使用哈希表存储各个数字出现的次数,很容易求出结果。但是时空复杂度都为O(n),不满足本题的额外要求。
优化解法参考自官方题解
优化解法:摩尔投票法
摩尔投票法的核心就是四个字“对拼内耗”,我们通过不同元素的对拼内耗,不断消耗数组内元素,根据我们寻找众数的条件,选择不同规模的对拼内耗,如果存在满足条件的众数,那么一定是在对拼内耗中存活下来的。我们只需要重新遍历一遍数组,幸存的元素统计数量判断是否满足要求就好。
在本题中,我们寻找数量大于n/3的数字,易知最多存在两个元素满足条件,那我们选择每次三个元素对拼内耗,对幸存的两个元素进行检查。
摩尔投票法思路求解时间复杂度O(n),空间复杂度O(1);

做本题前可先做简单版->LeetCode169-多数元素(求众数I)

在这里插入图片描述

class Solution
{
   
public:
    vector<int> majorityElement(vector<int> &nums)
    {
   
        //摩尔投票法
        int data1 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值