美文网首页
摩尔投票法

摩尔投票法

作者: simon_kin | 来源:发表于2021-03-15 16:44 被阅读0次

题目描述

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

分析:采用摩尔投票法,两个阶段:抵消阶段和计数阶段

抵消阶段:两个不同投票进行对抗,并且同时抵消掉各一张票,如果两个投票相同,则累加可抵消的次数;

计数阶段:在抵消阶段最后得到的抵消计数只要不为 0,那这个候选人是有可能超过一半的票数的,为了验证,则需要遍历一次,统计票数,才可确定

public static int majorityElement(int[] nums) {
        int len = nums.length;

        if (len==0){
            return -1;
        }

        int major = 0;
        int vote = 0;

        for (int num:nums){
            if (vote==0){
                major = num;
                vote = 1;
            }else {
                if (major==num){
                    vote++;
                }else {
                    vote--;
                }
            }
        }
        if (vote==0){
            return -1;
        }

        int flag = 0;
        for (int num:nums){
            if (major == num){
                flag ++;
                if (flag>len/2){
                    return major;
                }
            }
        }
        return -1;
    }

相关文章

  • 使用摩尔投票法解决多数问题

    1、什么是摩尔投票法 博耶-摩尔多数投票算法(英语:Boyer–Moore majority vote algor...

  • 摩尔投票法

    提问: 给定一个int型数组,找出该数组中出现次数大于数组长度一半的int值。 解决方案: 遍历该数组,统计每个i...

  • 摩尔投票法

    摩尔投票法又叫多数投票法。 解决的问题如何在任意多的候选人中,选出获得票数最多的那个 算法包括两个阶段 1. 对抗...

  • 摩尔投票法

    题目描述 给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/2 ⌋ 次的元素。 分析:采用摩尔投票法,两个...

  • 169. 多数元素

    169. 多数元素 经典面试题 摩尔投票法

  • 【leetcode解题】算法之摩尔投票法

    leetcode题目: 首先我用用了个Map,一旦出现计数超过数组长度一半,直接return。通过。但是觉得这道题...

  • LeetCode—— 多数元素

    题目描述 一、CPP 1. 摩尔投票法: 解题思路:如果我们把众数记为 +1,把其他数记为 −1 ,将它们全部加起...

  • Day15 n个骰子的点数 + 剪绳子 + 数组中出现次数超过一

    TODO: 重做 n个骰子的点数,仔细理清楚思路 重做剪绳子 理解并记忆摩尔投票法 剑指 Offer 60. n个...

  • 力扣题解(数组)

    26. 删除排序数组中的重复项 面试题 16.21. 交换和 面试题 17.10. 主要元素 摩尔投票法 15. ...

  • 力扣(LeetCode) - 229 求众数

    本题可以摩尔投票法来解决 一、题目 给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 ...

网友评论

      本文标题:摩尔投票法

      本文链接:https://www.haomeiwen.com/subject/ijgkcltx.html