zoukankan      html  css  js  c++  java
  • 众数-摩尔投票法

    169. 多数元素

    给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

    你可以假设数组是非空的,并且给定的数组总是存在多数元素。

    比较容易想到有hash,排序;难想到的有位运算的方法;

    摩尔投票法:

    class Solution {
    public:
        int majorityElement(vector<int>& nums) {
            int res = -1,cnt = 0;
            for(auto x:nums){
                if(!cnt) res = x,cnt = 1;
                else{
                    if(x == res) cnt++;
                    else cnt--;
                }
            }
            return res;
        }
    };

    229. 求众数 II

    给定一个大小为 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。

    说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1)。

    class Solution {
    public:
        vector<int> majorityElement(vector<int>& nums) {
                if(!nums.size()) return{};
                //不要在nums中出现过
                int r1 = INT_MAX-123468,r2 = INT_MAX-1234568;
                int c1 = 0,c2 = 0;
                for(auto x:nums){
                    if(x == r1) c1++;
                    else if(x == r2) c2++;
                    else if(c1 == 0) r1 = x,c1 = 1;
                    else if(c2 == 0) r2 = x,c2 = 1;
                    else c1--, c2--;
                }
                vector<int> res;
                c2 = 0;c1 = 0;
                for(auto x:nums) if(x == r1) c1++;
                if(c1 >nums.size()/3) res.push_back(r1);
                for(auto x:nums) if(x == r2) c2++;
                if(c2 >nums.size()/3) res.push_back(r2);
                return res;
        }
    };
  • 相关阅读:
    C#获取MAC地址
    C#洗牌
    删除前提示
    简单MD5加密
    读取EXCEL所有列名C#
    gridview二次加载样式丢失
    迅雷API接口(及示例演示)
    [转]Servlet过滤器介绍之原理分析
    [转]MySQL运行状态show status中文详解
    [转]如何修改mysql root密码
  • 原文地址:https://www.cnblogs.com/Aliencxl/p/12341745.html
Copyright © 2011-2022 走看看