Leetcode.Majority Element

Majority Element

Given an array of size n, find the majority element.
The majority element is the element that appears more than ⌊ n/2 ⌋ times.

You may assume that the array is non-empty and the majority element always exist in the array.

题目大意:
找出一个整型数组中出现次数超过一半的元素。

解题思路:
1.统计每个数字的出现次数。
2.对数组排序,位于中间的元素一定是出现次数超过一半的元素。
3.Moore’s Voting算法,每次删掉集合中一对不同的元素,直到集合为空或没有不同元素。 若存在元素e出现频率超过半数,那么集合中最终只有元素e。

//统计每个数字的出现次数, 返回出现次数最多的元素
int majorityElement(vector<int>& nums) {
    int z;
    map<int, int> c;
    for (auto e = nums.begin(); e < nums.end(); e++){
        c[*e]++;
        if (c[*e] > c[z])
            z = *e;
    }
    return z;
}
//排序后输出中间元素
int majorityElement(vector<int>& nums) {
    sort(nums.begin(), nums.end());
    return nums[nums.size()>>1];
}
//Moore's Voting算法
int majorityElement(vector<int>& nums) {
    int c, z = nums[0];
    for (auto e = nums.begin() + 1; e < nums.end(); e++){
        if (*e == z)
            c++;
        else if (!c)
            z = *e;
        else
            c--;
    }
    return z;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值