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 使用范围优先。

posted @ 2020-11-24 23:00  浪荡&不羁  阅读(74)  评论(0编辑  收藏  举报