leetcode-229- Majority Element II

来源:互联网 发布:社交网络观后感 编辑:程序博客网 时间:2024/05/07 17:37

问题

题目:[leetcode-229]

思路

参考[Major Element]
都是采用moore’s voting algorithm,只不过第一个问题是一定存在。但是本题不存在,投票完了之后需要验证。

写代码需要注意一点:避免m和n重复的情形。
还有循环判断的顺序不能变!!!

代码

class Solution {public:    vector<int> majorityElement(vector<int>& nums) {        int m = 0, cm = 0;        int n = 0, cn = 0;        int sz = nums.size();        for( int i = 0; i < sz; ++i ){            if( nums[i] == m ) cm++;            else if( nums[i] == n ) cn++;            else if(!cm)            {                m = nums[i];                cm = 1;            }            else if(!cn)            {                n = nums[i];                cn = 1;            }            else            {                --cm;                --cn;            }        }        cm = cn = 0;        for( int i = 0; i < sz; ++i ){            if( nums[i] == m )                ++cm;            else if( nums[i] == n )                ++cn;        }        std::vector<int> ret;        if( cm > sz/3 )            ret.push_back(m);        if( cn > sz/3 )            ret.push_back(n);        return ret;    }};
0 0
原创粉丝点击