
难度:Hard
使用Moore Voting,先找出两个或一个多数,然后再遍历一遍,看看各自的个数是不是大于1/3。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
class Solution { public: vector<int> majorityElement(vector<int>& nums) { if(nums.size() == 0) return vector<int>(); int m = 0,n = 0,cm = 0,cn = 0; for(int i = 0; i < nums.size(); i++) { if(nums[i] == m) cm++; else if(nums[i] == n) cn++; else if(nums[i] != m && cm == 0) m=nums[i],cm=1; else if(nums[i] != n && cn == 0) n=nums[i],cn=1; else cm--,cn--; } // cout<<m<<" "<<n<<endl; cm = 0; cn = 0; for(int i = 0; i < nums.size(); i++) { if(nums[i] == m) cm++; else if(nums[i] == n) cn++; } // cout<<cm<<" "<<cn<<endl; vector<int>ret; if(cm > nums.size()/3) ret.push_back(m); if(cn > nums.size()/3) ret.push_back(n); return ret; } };
|
近期评论