mirror of
https://github.com/ShusenTang/LeetCode.git
synced 2024-09-02 14:20:01 +00:00
Update 169. Majority Element.md
This commit is contained in:
parent
d82f798813
commit
d0dfeafcae
@ -4,10 +4,14 @@
|
|||||||
## 思路一: 排序
|
## 思路一: 排序
|
||||||
若对数组nums进行排序,则nums[n/2]就是主元素。
|
若对数组nums进行排序,则nums[n/2]就是主元素。
|
||||||
时间复杂度为O(nlogn)。
|
时间复杂度为O(nlogn)。
|
||||||
## 思路二: 投票算法
|
|
||||||
|
## 思路二: 摩尔投票算法
|
||||||
因为主元素总是存在。所以每出现两个不一样的数就可以忽视这两个数。最终剩下的就是主元素。
|
因为主元素总是存在。所以每出现两个不一样的数就可以忽视这两个数。最终剩下的就是主元素。
|
||||||
我们可以从前往后遍历,如果某数和当前major相同那么count++,否则count--,如果count为零了,那么当前major应该改成当前这个数。
|
我们可以从前往后遍历,如果某数和当前major相同那么count++,否则count--,如果count为零了,那么当前major应该改成当前这个数。
|
||||||
时间复杂度O(n)。
|
时间复杂度O(n)。
|
||||||
|
> 摩尔投票法的核心就是成对抵消,即删除不同的数。
|
||||||
|
举一个形象的例子[(例子来源)](https://www.zhihu.com/question/49973163/answer/617122734):玩一个诸国争霸的游戏,假设你方人口超过天下总人口一半以上,并且能保证每个人口出去干仗都能一对一同归于尽。最后还有人活下来的国家就是胜利。最差情况就是所有其他国家的人都联合起来对付你国(对应你每次选择作为计数器的数都是众数),但其实还存在其他国家也会相互攻击(会选择其他数作为计数器的数)的情况,但只要你们不要内斗,最后能剩下的必定是自己人,即最后肯定你国赢。
|
||||||
|
|
||||||
## 思路三: 位运算
|
## 思路三: 位运算
|
||||||
如果将每个数都转换为二进制的话,那么对于每一位上就只能是0或1。对每一位,取出现次数较多的数(0或1),这样组成的数就是主元素。
|
如果将每个数都转换为二进制的话,那么对于每一位上就只能是0或1。对每一位,取出现次数较多的数(0或1),这样组成的数就是主元素。
|
||||||
时间复杂度O(n)。
|
时间复杂度O(n)。
|
||||||
|
Loading…
Reference in New Issue
Block a user