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

多数元素题解(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)

http://www.xdnf.cn/news/3321.html

相关文章:

  • 扩展根分区
  • 软件产品测试报告:如何全面评估及保障软件质量?
  • kubernetes》》k8s》》Service 、Ingress 区别
  • C 语 言 - - - 动 态 内 存 分 配
  • SIwave基本操作之S参数仿真
  • 5. 进程地址空间
  • react中封装一个预览.doc和.docx文件的组件
  • Vue3 + TypeScript 实现 PC 端鼠标横向拖动滚动
  • 【蓝桥杯】第十六届蓝桥杯C/C++大学B组个人反思总结
  • 高性能架构设计-数据库(读写分离)
  • OpenHarmony - 小型系统内核(LiteOS-A)(十七)标准库
  • 加速LLM大模型推理,KV缓存技术详解与PyTorch实现
  • java: 警告: 源发行版 21 需要目标发行版 21
  • PostgreSQL的COALESCE 函数用法
  • 慧星云支持 Qwen3:开启智算新生态,共筑高效 AI 未来
  • WebGL图形编程实战【5】:层次构建 × Shader初始化深度剖析
  • 基于ssm的校园旧书交易交换平台(源码+文档)
  • Microsoft Entra ID 详解:现代身份与访问管理的核心
  • 三分钟了解自动拆箱封箱操作
  • Pillow 移除或更改了 FreeTypeFont.getsize() 方法
  • mac下载homebrew 安装和使用git
  • SimFlow: 基于OpenFOAM的CFD求解器
  • 积木报表的 API 数据集 (附Demo图文)
  • JavaAPI — 日期与集合
  • Spring MVC @RequestParam 注解怎么用?如何处理可选参数和默认值?
  • 温补晶振(TCXO)稳定性优化:从实验室到量产的关键技术
  • 【爬虫】deepseek谈爬虫工具
  • Java 多线程进阶:什么是线程安全?
  • 如何在 Linux 环境下使用 Certbot 自动生成 SSL 证书并部署到 Nginx 服务中
  • 【论文阅读】APMSA: Adversarial Perturbation Against Model Stealing Attacks