0
点赞
收藏
分享

微信扫一扫

LeetCode 169.多数元素

玉字璧 2022-02-10 阅读 63
//排序法
class Solution
{
public:
    int majorityElement(vector<int> &nums)
    {
        sort(nums.begin(), nums.end());
        return nums[nums.size() / 2];
    }
};
//哈希表
class Solution
{
public:
    int majorityElement(vector<int> &nums)
    {
        //创建unordered_map容器,记录key对应的value
        unordered_map<int, int> times;
        //多数元素,多数元素的出现次数
        int majority = 0, count = 0;
        for (int num : nums) //遍历数组
        {
            ++times[num];           //将数组元素插入哈希表
            if (times[num] > count) //更新majority和count
            {
                majority = num;
                count = times[num];
            }
        }
        return majority; //返回多数元素
    }
};
//随机查找
class Solution
{
public:
    int majorityElement(vector<int> &nums)
    {
        while (true)
        {
            //利用求余法获取随机数字,令count初始为0
            int random = nums[rand() % nums.size()], count = 0;
            for (int num : nums) //遍历数组
            {
                if (num == random)
                {
                    //统计random在数组中的出现次数
                    count++;
                }
            }
            //如果random的出现次数超过一半,则为多数元素
            if (count > nums.size() / 2)
            {
                return random;
                break;
            }
        }
    }
};
//摩尔投票法:多数元素的个数-其余元素的个数总和>=1
class Solution
{
public:
    int majorityElement(vector<int> &nums)
    {
        //初始化候选数为nums[0],票数为1;
        int cand_num = nums[0], count = 1, len = nums.size();
        //从第2个元素开始遍历数组
        for (int i = 1; i < len; i++)
        {
            //遇到相同的数
            if (nums[i] == cand_num)
            {
                //票数加一
                count++;
            }
            //遇到不同的数,票数减一
            else if (--count == 0)
            {
                //如果票数为0,更换候选数
                cand_num = nums[i];
                // count重置为1
                count = 1;
            }
        }
        return cand_num;
    }
};
举报

相关推荐

0 条评论