File tree Expand file tree Collapse file tree 2 files changed +10
-7
lines changed Expand file tree Collapse file tree 2 files changed +10
-7
lines changed Original file line number Diff line number Diff line change @@ -37,14 +37,17 @@ https://leetcode-cn.com/problems/majority-element/
37
37
38
38
## 思路
39
39
40
- 符合直觉的做法是利用额外的空间去记录每个元素出现的次数,并用一个单独的变量记录当前出现次数最多的元素 。
40
+ 这个问题也被称为 ** 水王问题 ** 。即让我们求数组中超过一半的数 。
41
41
42
- 但是这种做法空间复杂度较高,有没有可能进行优化呢? 答案就是用"投票算法"。
42
+ 符合直觉的做法是利用额外的空间去记录每个元素出现的次数,并用一个单独的变量记录当前出现次数最多的元素。 但是这种做法空间复杂度较高,有没有可能进行优化呢? 答案就是用"投票算法"。
43
43
44
- 投票算法的原理是通过不断消除不同元素直到没有不同元素,剩下的元素就是我们要找的元素。
44
+ 投票算法的原理是通过不断** 消除不同元素直到没有不同元素** ,剩下的元素就是我们要找的元素。注意这里的关键是消除不同的数。
45
+
46
+ 背后的原理非常简单,即最坏的情况下非众数中的每一个数都和众数进行消除,那么剩下的是众数。其他情况则显然剩下的也是众数本身。
45
47
46
48
![ ] ( https://tva1.sinaimg.cn/large/007S8ZIlly1ghlu7i1c8tj30mz0cjwfk.jpg )
47
49
50
+
48
51
## 关键点解析
49
52
50
53
- 投票算法
Original file line number Diff line number Diff line change @@ -49,13 +49,13 @@ https://leetcode-cn.com/problems/majority-element-ii/
49
49
50
50
我们仍然可以采取同样的方法 - “摩尔投票法”, 具体的思路可以参考上面的题目。
51
51
52
- 但是这里有一个不同的是这里的众数不再是超过` 1 / 2 ` ,而是超过` 1 / 3 ` 。
53
- 题目也说明了,超过三分之一的有可能有多个(实际上就是 0,1,2 三种可能)。
52
+ 但是这里有一个不同的是这里的众数不再是超过` 1 / 2 ` ,而是超过` 1 / 3 ` 。题目也说明了,超过三分之一的有可能有多个
53
+
54
+ > 实际上就是 0,1,2 三种可能。
54
55
55
56
因此我们不能只用一个 counter 来解决了。 我们的思路是同时使用两个 counter,其他思路和上一道题目一样。
56
57
57
- 最后需要注意的是两个 counter 不一定都满足条件,这两个 counter 只是出现次数最多的两个数字。
58
- 有可能不满足出现次数大于 1/3, 因此最后我们需要进行过滤筛选。
58
+ 最后需要注意的是这两个 counter 只是出现次数最多的两个数字, 不一定都满足条件出现次数大于 1/3,因此最后我们需要进行过滤筛选。
59
59
60
60
这里画了一个图,大家可以感受一下:
61
61
You can’t perform that action at this time.
0 commit comments