码迷,mamicode.com
首页 > 其他好文 > 详细

229. Majority Element II

时间:2020-03-21 14:33:14      阅读:43      评论:0      收藏:0      [点我收藏+]

标签: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 };

 

229. Majority Element II

标签:tput   style   solution   nbsp   put   size   lse   push   inpu   

原文地址:https://www.cnblogs.com/habibah-chang/p/12539096.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!