zoukankan      html  css  js  c++  java
  • leetcode 169. Majority Element 多数投票算法(Boyer-Moore Majority Vote algorithm)

    题目:

    Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.

    You may assume that the array is non-empty and the majority element always exist in the array.

    题解:运用多数投票算法的思路来解:从头到尾遍历数组,遇到两个不一样的数就把这两个数同时除去。除去的两个数可能都不是majority,也可能一个是majority一个不是,但是因为majority总数大于一半(注意不能等于一半),所以这么删完了最后肯定剩下的数是majority。(因为题目说了肯定有majority,如果没说,剩下的那个数未必是majority,还应该遍历一遍数组统计这个数的出现次数)。

    这个算法的时间复杂度O(n),空间复杂度O(1)

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

    扩展:如果找改成大于[n/3]的,道理完全一样。参见这道题

  • 相关阅读:
    Linux route
    python 实现自定义切片类
    python 自省机制
    python 实例方法、静态方法、类方法
    python 动态语言和协议编程
    python 鸭子类型
    信息论
    CRF keras代码实现
    CRF 详细推导、验证实例
    attention 汇总(持续)
  • 原文地址:https://www.cnblogs.com/zywscq/p/5399567.html
Copyright © 2011-2022 走看看