0
点赞
收藏
分享

微信扫一扫

【力扣】多数元素

蒸熟的土豆 2022-04-08 阅读 28
算法

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。

//使用map辅助解题
class Solution {
public:
    int majorityElement(vector<int>& nums)
    {
        map<int,int> count;
        for(int num: nums)
        {
            ++count[num];
            if(count[num]>=(nums.size()/2+nums.size()%2))
            {
                return num;
            }
        }
        return 0;
    }
    
};
//来自题解
class Solution {
public:
    int majorityElement(vector<int>& nums) 
    {
        unordered_map<int, int> counts;
        int majority = 0, count = 0;
        for (int num: nums) 
        {
            ++counts[num];
            if (counts[num] > count) 
            {
                majority = num;
                count = counts[num];
            }
        }
        return majority;
    }

};
//摩尔投票法
/*
由于在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素,众数超过一半,最坏的情况是其他数与众数相抵消,但是最后还是会剩下众数
*/
class Solution {
public:
    int majorityElement(vector<int>& nums) 
    {
        int major = nums[0];
        int ret = 1;
        for(int i = 1;i<nums.size();i++)
        {
        	//得票为0时,假设下一个数为众数
            if(0 == ret)
            {
                major = nums[i];
                ++ret;
            }//相同的数加1,不同的减1
            else if(major == nums[i])
            {
                ++ret;
            }
            else
            {
                --ret;
            }
        }
        return major;
    }

};
举报

相关推荐

0 条评论