zoukankan      html  css  js  c++  java
  • 229 Majority Element II 求众数 II

    给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 你的算法应该在O(1)空间中以线性时间运行。

    详见:https://leetcode.com/problems/majority-element-ii/description/

    摩尔投票法 Moore Voting

    Java实现:

    class Solution {
        public List<Integer> majorityElement(int[] nums) {
            List<Integer> res=new ArrayList<Integer>();
            if(nums==null||nums.length==0){
                return res;
            }
            int a=nums[0],cnta=0;
            int b=nums[0],cntb=0;
            for (int num : nums) {
                if (num == a) {
                    ++cnta;
                }else if(num == b) {
                    ++cntb;
                }else if(cnta == 0) {
                    a = num;
                    cnta=1;
                }else if(cntb == 0) {
                    b = num;
                    cntb=1;
                }else{
                    --cnta;
                    --cntb;
                }
            }
            cnta=0;
            cntb=0;
            for(int num:nums){
                if(num==a){
                    ++cnta;
                }else if(num==b){
                    ++cntb;
                }
            }
            if(cnta>nums.length/3){
                res.add(a);
            }
            if(cntb>nums.length/3){
                res.add(b);
            }
            return res;
        }
    }
    

     C++实现:

    class Solution {
    public:
        vector<int> majorityElement(vector<int>& nums) {
            vector<int> res;
            int m = 0, n = 0, cm = 0, cn = 0;
            for (auto &a : nums)
            {
                if (a == m)
                {
                    ++cm;
                }
                else if (a ==n)
                {
                    ++cn;
                }
                else if (cm == 0)
                {
                    m = a, cm = 1;
                }
                else if (cn == 0)
                {
                    n = a, cn = 1;
                }
                else
                {
                    --cm, --cn;
                }
            }
            cm = cn = 0;
            for (auto &a : nums)
            {
                if (a == m)
                {
                    ++cm;
                }
                else if (a == n)
                {
                    ++cn;
                }
            }
            if (cm > nums.size() / 3)
            {
                res.push_back(m);
            }
            if (cn > nums.size() / 3)
            {
                res.push_back(n);
            }
            return res;
        }
    };
    

    参考:https://www.cnblogs.com/grandyang/p/4606822.html

  • 相关阅读:
    java properties
    js resource
    script Ruby / Rails / Arachni
    webServer / Apache / apache / apache http server / mod_cluster
    JAVA XML open protocol
    二维数组举例
    二维数组
    二维数组
    二维数组
    二维数组
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8758768.html
Copyright © 2011-2022 走看看