Skip to content

Commit e9c0d3a

Browse files
author
robot
committed
feat: 众数
1 parent 294774e commit e9c0d3a

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

problems/169.majority-element.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,17 @@ https://leetcode-cn.com/problems/majority-element/
3737

3838
## 思路
3939

40-
符合直觉的做法是利用额外的空间去记录每个元素出现的次数,并用一个单独的变量记录当前出现次数最多的元素
40+
这个问题也被称为 **水王问题**。即让我们求数组中超过一半的数
4141

42-
但是这种做法空间复杂度较高,有没有可能进行优化呢? 答案就是用"投票算法"。
42+
符合直觉的做法是利用额外的空间去记录每个元素出现的次数,并用一个单独的变量记录当前出现次数最多的元素。但是这种做法空间复杂度较高,有没有可能进行优化呢? 答案就是用"投票算法"。
4343

44-
投票算法的原理是通过不断消除不同元素直到没有不同元素,剩下的元素就是我们要找的元素。
44+
投票算法的原理是通过不断**消除不同元素直到没有不同元素**,剩下的元素就是我们要找的元素。注意这里的关键是消除不同的数。
45+
46+
背后的原理非常简单,即最坏的情况下非众数中的每一个数都和众数进行消除,那么剩下的是众数。其他情况则显然剩下的也是众数本身。
4547

4648
![](https://tva1.sinaimg.cn/large/007S8ZIlly1ghlu7i1c8tj30mz0cjwfk.jpg)
4749

50+
4851
## 关键点解析
4952

5053
- 投票算法

problems/229.majority-element-ii.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,13 @@ https://leetcode-cn.com/problems/majority-element-ii/
4949

5050
我们仍然可以采取同样的方法 - “摩尔投票法”, 具体的思路可以参考上面的题目。
5151

52-
但是这里有一个不同的是这里的众数不再是超过`1 / 2`,而是超过`1 / 3`
53-
题目也说明了,超过三分之一的有可能有多个(实际上就是 0,1,2 三种可能)。
52+
但是这里有一个不同的是这里的众数不再是超过`1 / 2`,而是超过`1 / 3`。题目也说明了,超过三分之一的有可能有多个
53+
54+
> 实际上就是 0,1,2 三种可能。
5455
5556
因此我们不能只用一个 counter 来解决了。 我们的思路是同时使用两个 counter,其他思路和上一道题目一样。
5657

57-
最后需要注意的是两个 counter 不一定都满足条件,这两个 counter 只是出现次数最多的两个数字。
58-
有可能不满足出现次数大于 1/3, 因此最后我们需要进行过滤筛选。
58+
最后需要注意的是这两个 counter 只是出现次数最多的两个数字, 不一定都满足条件出现次数大于 1/3,因此最后我们需要进行过滤筛选。
5959

6060
这里画了一个图,大家可以感受一下:
6161

0 commit comments

Comments
 (0)