美文网首页
剑指offer 39 找一个众数

剑指offer 39 找一个众数

作者: 再凌 | 来源:发表于2020-05-03 21:26 被阅读0次

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。

    思路: 哈希

    class Solution {
    public:
        int majorityElement(vector<int>& nums) {
            unordered_map<int,int>mp;
            for(auto it : nums){
                mp[it]++;
                if(mp[it]>nums.size()/2) return it;
            }
            return 0;
        }
    };
    
    

    时间复杂度: N
    空间复杂度: N

    更好的思路: 摩尔投票法: 和自己相同的会给自己票数+1, 不相同的会给自己票数-1.
    设当前的值可能是众数, 那么遇到下一个不是当前值的时, 统计-1, 并且跳到下下个值. 无论如何, 最终那个众数一定投票统计一定是>0的.
    时间复杂度: N
    空间复杂度: 1

    相关文章

      网友评论

          本文标题:剑指offer 39 找一个众数

          本文链接:https://www.haomeiwen.com/subject/pgijghtx.html