【数据结构与算法Trip第4站】摩尔投票法
摩尔投票法
针对问题
当需要找寻一个数组中,存在某个数字出现的次数大于数组长度一半时。(等于情况不一定成立)
思路:
-
假设第一个数字是候选多数元素 candidate,并初始化计数器 count = 1。
-
遍历数组:
-
如果当前数字等于 candidate,则 count += 1。
-
否则 count -= 1。
-
如果 count == 0,则更换 candidate为当前数字,并重置 count = 1。
-
最后剩下的 candidate就是多数元素。
为什么有效?
- 因为多数元素的数量比其他所有元素的总和还多,所以它一定能“战胜”其他数字。
时间复杂度:O(n)(只需遍历一次)
空间复杂度:O(1)(只用了常数空间)