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; } };