当前位置: 首页 > news >正文

多数元素题解(LC:169)

 169. 多数元素
 

 核心思想(Boyer-Moore 投票算法):

  • 解题思路:可以使用 Boyer-Moore 投票算法、该算法的核心思想是:

    • 维护一个候选元素和计数器、初始时计数器为 0。

    • 遍历数组:

      • 当计数器为 0 时、设置当前元素为候选元素。

      • 如果当前元素等于候选元素、计数器加 1。否则、计数器减 1

    • 最终、候选元素即为多数元素。

思路类比:士兵打仗(两军对抗)

假设:

  • 每个数是一名士兵、士兵可能来自甲军(候选元素)或乙军(非候选元素)

  • 每当我们遇到一个士兵:

    • 如果他是甲军、我们 +1。

    • 如果他是乙军、我们 -1(理解为与甲军一人同归于尽)。

  • 一旦计数为0、说明甲军原来的优势被抵消了、我们重新选择当前的士兵作为新的候选(也就是新的甲军)。

由于题目保证多数元素存在(出现次数 > n/2)、那么无论中间怎样对冲、最后剩下的那个一定是甲军士兵(多数元素)

class Solution {public int majorityElement(int[] nums) {int count = 0;int candidate = 0;for (int num : nums) {if (count == 0) {candidate = num;}if (num == candidate) {count++;} else {count--;}}return candidate;}
}

这个算法的时间复杂度是 O(n)空间复杂度是 O(1)

相关文章:

  • “BYD SHENZHEN”启运,搭载超7000台比亚迪新能源车前往巴西
  • QT6 源(62)篇五:阅读与注释 QString 这个类,先给出官方综述,带一些翻译。总篇目太大,代码就有 2000 行
  • 机器学习,深度学习
  • 全面接入!Qwen3现已上线千帆
  • 第八节:目录操作
  • 晶振:从消费电子到航天领域的时间精度定义者
  • 第六部分:实战项目与拓展
  • VS Code技巧2:识别FreeCAD对象
  • 可视化图解算法:判断是否完全二叉树
  • 基于SpringBoot的母婴商城系统设计与实现(附源码+PPT+论文)
  • 【操作系统】进程和线程的区别
  • /var/log/sssd/` 目录解析
  • HTN77A0原理图提供聚能芯半导体禾润一级代理技术支持免费送样
  • MySQL学习笔记(基础篇)
  • 解锁Windows异步黑科技:IOCP从入门到精通
  • 虚拟机安装SQLServer2000
  • 用Ai学习wxWidgets笔记——自制wxWidgets开发参考手册(主体)
  • 在油气地震资料积分法偏移成像中,起伏地表处理
  • agent course-2
  • CBC(Clock Boundary Crossing)简介
  • “女乘客遭顺风车深夜丢高速服务区”续:滴滴永久封禁两名涉事司机账号
  • 北京银行一季度净赚超76亿降逾2%,不良贷款率微降
  • 辽宁省全力开展辽阳一饭店火灾事故救援处置工作
  • 逛了6个小时的上海车展。有些不太成熟的感受。与你分享。
  • 港理大公布多项AI+医工成果,助港建设国际医疗创新枢纽
  • 千亿市值光储龙头董事长向母校合肥工业大学捐赠1亿元