给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。
说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1)。
示例 1:
输入: [3,2,3]
输出: [3]
示例 2:
输入: [1,1,1,3,3,2,2,2]
输出: [1,2]
class Solution {
public:
vector<int> majorityElement(vector<int>& nums) {
int n = nums.size();
for(int i=0; i<n; i++) {
itr = mp.find(nums[i]);
if(itr == mp.end()) {
mp.insert(pair<int, int>(nums[i], 1));
}
else {
itr->second++;
}
}
vector<int> ans;
for(itr=mp.begin(); itr!=mp.end(); itr++) {
if(itr->second > n/3) {
ans.push_back(itr->first);
}
}
return ans;
}
map<int, int> mp;
map<int, int>::iterator itr;
};