leetcode 多数元素 简单

 

 

 哈希统计数量,或者排序都可以。

哈希:时间 O(n),空间 O(n)

排序:时间 O(nlogn),空间 O(1)

// 哈希
class Solution {
public:
    int majorityElement(vector<int>& nums) {
        unordered_map<int,int> cnt;
        for(auto &item : nums) {
            ++ cnt[item];
        }
        for(auto &item : cnt) {
            if(item.second > nums.size() / 2)
                return item.first;
        }
        return 0;
    }
};

 

还有一个时间 O(n),空间 O(1) 的做法,Boyer-Moore 投票算法。

假设当前众数为 ret,还有一个记录数量的变量 cnt,如果 num[i] == ret,则 cnt + 1,否则 cnt - 1

当 cnt < 0 时,替换 ret 为当前数,cnt 置 1

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int ret = nums[0], cnt = 1;
        for(int i = 1; i < nums.size(); ++ i) {
            if(nums[i] == ret) cnt ++;
            else cnt --;
            if(cnt <= 0) {
                cnt = 1;
                ret = nums[i];
            }
        }
        return ret;
    }
};

 

posted @ 2021-07-25 14:41  rookie_Acmer  阅读(40)  评论(0)    收藏  举报