标签:tput style solution nbsp put size lse push inpu
问题:求一个数列中,出现次数>n/3次的数字
Example 1: Input: [3,2,3] Output: [3] Example 2: Input: [1,1,1,3,3,2,2,2] Output: [1,2]
方法:
占权重法
出现次数>n/3,则可能出现最多两个结果。
将两个待选结果设为n1,n2,同时累计出现次数cout1,cout2。
如果出现非自己和另一个结果的数值,则自己的cout--,来抵消出现的次数。
最终剩下的则为待选结果。
再遍历,求的实际出现次数,
如果>n/3则保存到res结果中。
代码参考:
1 class Solution { 2 public: 3 vector<int> majorityElement(vector<int>& nums) { 4 int n1,n2, cout1=0, cout2=0; 5 vector<int> res; 6 for(int n:nums){ 7 if(n==n1&&cout1!=0){ 8 cout1++; 9 }else if(n==n2&&cout2!=0){ 10 cout2++; 11 }else if(cout1==0){ 12 n1=n; 13 cout1=1; 14 }else if(cout2==0){ 15 n2=n; 16 cout2=1; 17 }else{ 18 cout1--; 19 cout2--; 20 } 21 } 22 cout1=0,cout2=0; 23 for(int n:nums){ 24 if(n==n1) cout1++; 25 if(n==n2) cout2++; 26 } 27 if(cout1>nums.size()/3)res.push_back(n1); 28 if(n1!=n2 && cout2>nums.size()/3)res.push_back(n2); 29 return res; 30 } 31 };
标签:tput style solution nbsp put size lse push inpu
原文地址:https://www.cnblogs.com/habibah-chang/p/12539096.html