其他分享
首页 > 其他分享> > LC169-多数元素

LC169-多数元素

作者:互联网

169. 多数元素

法1:(投票算法)

//投票算法
class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int r, c = 0;
        for (auto x: nums)
            if (!c) r = x, c = 1;
            else if (r == x) c ++ ;
            else c -- ;
        return r;
    }
};

法2:哈希表统计暴力做法:

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int n = nums.size();
        unordered_map<int,int>cnt;
        for(auto c:nums){
            cnt[c]++;
            if(cnt[c] > n / 2)return c;
        }
        return -1;
    }
};

法3:位运算

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int ans = 0;
        for(int i = 0; i < 32; ++i){
            int cnt = 0;
            for(auto& x : nums)
                cnt += (x >> i) & 1;               //位运算法统计每个位置上1出现的次数,每次出现则ones+1
            ans += (cnt > nums.size() / 2) << i ;  //如果1出现次数大于1/2数组的长度,1即为这个位置的目标数字
        }
        return ans;
    }
};

标签:cnt,return,nums,int,auto,元素,LC169,多数,public
来源: https://www.cnblogs.com/Ivessas/p/14992522.html