zoukankan      html  css  js  c++  java
  • Boyer-Moore Voting Algorithm

    Boyer-Moore Voting Algorithm

    以题讲解

    我们以 LeetCode 的 169. Majority Element 来讲解这个巧妙的算法吧。

    在给定的 n 个数据中,至少存在 n / 2 + 1 个相同的数据,找出这个特殊的数据。

    算法思想

    这个算法的主要思想可以这样理解:

    假设存在这样的一类棋牌游戏,有黑白两棋,其中有一方的数量至少比对方多一个,这类棋牌游戏只能采用一对一的同归于尽玩法,那么剩下的就是胜方。(牛逼游戏!!)

    我们这里的 n 个数据也采用同样的方式,至少 n / 2 + 1 个相同的数据的为甲方,其他的数据为乙方,双方采用同归于尽法,剩下的就是我们想要的特殊数据了。

    代码实现

    此算法的思想就是这样子,下面用代码实现一下:

    /**
     * @param {number[]} nums
     * @return {number}
     */
    let getSpecialData = (nums) => {
      let count = 0;
      let result = 0;
    
      for (let num of nums) {
        if (count === 0) {
          result = num;
        }
        count += num === result ? 1 : -1;
      }
    
      return result;
    }
    

    总结

    Boyer-Moore Voting Algorithm 使用范围优先。

  • 相关阅读:
    P4014 分配问题(网络流24题 最大最小费用流)
    二分图多重匹配
    图论
    小于n的质数的个数(1≤n≤10^11)
    P2341 [HAOI2006]受欢迎的牛| 强连通分量 Tarjan 缩点
    数据库
    树状数组
    C++ 学习笔记
    网络原理
    CG 中点法画直线
  • 原文地址:https://www.cnblogs.com/AuKing/p/14033353.html
Copyright © 2011-2022 走看看