美文网首页工作生活
【leetcode解题】算法之摩尔投票法

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

作者: 嫻愔 | 来源:发表于2019-07-04 17:14 被阅读0次

leetcode题目:


image.png

首先我用用了个Map,一旦出现计数超过数组长度一半,直接return。通过。
但是觉得这道题的关键之处在于一个数组中计数超过数组长度一半的数字只可能存在一个。
网上查了一通,知道了摩尔投票法的算法,学习了一下:
摩尔投票法的基本思想很简单,在每一轮投票过程中,从数组中找出一对不同的元素,将其从数组中删除。这样不断的删除直到无法再进行投票,如果数组为空,则没有任何元素出现的次数超过该数组长度的一半。如果只存在一种元素,那么这个元素则可能为目标元素。
下面是c++代码

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int major = -1;
        int count = 0;
        for (int i = 0; i < nums.size(); i++) {
            if (count == 0) {
                major = nums[i];
                count++;
            } else {
                if (nums[i] == major) {
                    count++;
                }else {
                    count--;
                }
            }
        }
        return major;
    }
};

执行结果:


image.png

相关文章

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

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

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

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

  • LeetCode精讲:摩尔投票算法

    什么是摩尔投票算法? 摩尔投票算法是一种使用线性时间和常数空间查找大部分元素序列的算法。它以1981年出版的Rob...

  • LeetCode—— 多数元素

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

  • 摩尔投票法

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

  • 摩尔投票法

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

  • 摩尔投票法

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

  • leetcode之多数元素

    序 本文主要记录一下leetcode之多数元素 题目 题解 小结 这里采用投票法来解题,遍历数组,若vote小于等...

  • 169. 多数元素

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

  • leetcode-Boyer-Moore majority vo

    Boyer-Moore majority vote algorithm(摩尔投票算法) 简介 Boyer-Moor...

网友评论

    本文标题:【leetcode解题】算法之摩尔投票法

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