今天了解了一下摩尔投票法

今天了解了一下摩尔投票法

原题是leetcode229

  • 注意题目中有个条件是 找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。
  • 这个条件给我们的提示就是,不到⌊ n/3 ⌋ 次的人,一视同仁。
  • 基于这样的约定,我们才可以设置两个固定坑位之后,遍历数组。
  • 也就是说,本来在坑位上的人,如果不足以达到n/3这样的条件,那就可以将他请下来。换言之,我们一直关注的都是当前已经在领奖台上的人,如果不在,只能说明他已经不符合n/3的要求,尽管他曾经票数很多。
  • 之后就按照一般的思想进行下去即可。

为了便于理解,再想想n/4的情况

  • 这种情况下应该设置3个坑位,并且每次同时任选四个人进行一轮竞争。

注意这种题目和一般的找众数的区别,就是在有限制条件,不然是无法实现O(n)的。

posted @ 2020-09-02 18:44  AGkd  阅读(192)  评论(0编辑  收藏  举报