zoukankan      html  css  js  c++  java
  • [LeetCode] 229. Majority Element II

    Medium

    Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times.

    Note: The algorithm should run in linear time and in O(1) space.

    Example 1:

    Input: [3,2,3]
    Output: [3]

    Example 2:

    Input: [1,1,1,3,3,2,2,2]
    Output: [1,2]


    题目大意:
    找到数列中出现次数大于n/3的数字

    方法:
    题目限制运行时间是线性的,所占空间为常数级。
    使用摩尔投票的方法。每个数列中出现次数超过n/3的元素最多为两个(如果超过2个元素出现次数大于n/3:假设有3个元素出现次数超过n/3,那么3*time>n,(time>n/3),所以最多有两个元素出现次数超过n/3),那么先选出两个可能的目标元素,然后看这两个元素否都符合条件即可。
    参考:https://www.cnblogs.com/grandyang/p/4606822.html
    代码如下:
    class Solution {
    public:
        vector<int> majorityElement(vector<int>& nums) {
            if(nums.empty())return {};
            vector<int> res;
            int len=nums.size();
            int a=0,b=0,num_a=0,num_b=0;
            for(int num:nums){
                if(num==a)num_a++;
                else if(num==b)num_b++;
                else if(num_a==0){a=num;num_a=1;}
                else if(num_b==0){b=num;num_b=1;}
                else{num_a--,num_b--;}
            }
            num_a=num_b=0;
            for(int num:nums){
                if(num==a){num_a++;}
                else if(num==b){num_b++;}
            }
            if(num_a>len/3)res.push_back(a);
            if(num_b>len/3)res.push_back(b);
            return res;
        }
    };
  • 相关阅读:
    Web网页安全色谱
    控件继承
    加密(转摘)
    关于Chart控件X轴数据显示不全解决方法。
    orcle 创建表空间用户
    oracle REGEXP_REPLACE
    產生64位隨机無重復碼
    简单跨浏览器通信.
    [原創]加載動態JS文件.
    层的拖放
  • 原文地址:https://www.cnblogs.com/cff2121/p/11652925.html
Copyright © 2011-2022 走看看