在数组中找到出现次数大于n/k的数 发表于 2019-09-27 | 浏览 次 这道题十分重要,有诸多解法,且用到许多不同的思想。 在数组中找到出现次数超过n/2的数暴力破解排序法在数组找到出现次数大于n/k的数在数组中找到出现次数大于n/3的数123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051class Solution {public: vector<int> majorityElement(vector<int>& nums) { vector<int> res; if(nums.empty()){ return res; } map<int, int> mp; // cand for(int i=0;i<nums.size();i++){ if(mp.find(nums[i]) == mp.end()){ mp[nums[i]] = 1; }else{ ++mp[nums[i]]; } if(mp.size() == 3){ allMinusOne(mp); } } map<int,int> counter; countElem(nums, mp, counter); for(auto it=mp.begin();it!=mp.end();it++){ int num = it->first; if(counter[num]>(nums.size()/3)){ res.push_back(num); } } return res; } void allMinusOne(map<int,int> &mp){ auto it= mp.begin(); while(it!=mp.end()){ if(it->second==1){ it = mp.erase(it); }else{ --it->second; it++; } } } void countElem(vector<int>& nums, map<int,int>& mp,map<int,int>& counter){ for(auto num:nums){ if(mp.find(num)!=mp.end()){ if(counter.find(num)==counter.end()){ counter[num] = 1; }else{ ++counter[num]; } } } }}; c++中map的find方法查找一个键的时间复杂度为O(logn)