【数据结构与算法Trip第4站】摩尔投票法

摩尔投票法

针对问题

当需要找寻一个数组中,存在某个数字出现的次数大于数组长度一半时。(等于情况不一定成立)

思路​:

  • 假设第一个数字是候选多数元素 candidate,并初始化计数器 count = 1。

  • 遍历数组:

  • 如果当前数字等于 candidate,则 count += 1。

  • 否则 count -= 1。

  • 如果 count == 0,则更换 candidate为当前数字,并重置 count = 1。

  • 最后剩下的 candidate就是多数元素。

​为什么有效?​​

  • 因为多数元素的数量比其他所有元素的总和还多,所以它一定能"战胜"其他数字。

​时间复杂度​:O(n)(只需遍历一次)

​空间复杂度​:O(1)(只用了常数空间)

相关题目:力扣169

相关推荐
AI软著研究员4 小时前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish4 小时前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
颜酱5 小时前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
地平线开发者21 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮1 天前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者1 天前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考1 天前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx1 天前
CART决策树基本原理
算法·机器学习
Wect1 天前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱1 天前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法