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

力扣刷题(第三十六天)

灵感来源 

- 保持更新,努力学习

- python脚本学习

多数元素

解题思路

这道题是要找出数组中出现次数超过一半的元素。有几种不同的方法可以解决这个问题:

  1. 哈希表统计法:遍历数组,用哈希表统计每个元素的出现次数,然后找出次数超过一半的元素。时间复杂度和空间复杂度都是 O (n)。

  2. 排序法:如果将数组排序,那么下标为 n/2 的元素(n 为数组长度)一定是众数。时间复杂度取决于排序算法,通常是 O (n log n),空间复杂度 O (1)(如果是原地排序)。

  3. 摩尔投票法:这是一种非常巧妙的算法,时间复杂度 O (n),空间复杂度 O (1)。它的核心思想是:在每一轮投票过程中,从数组中找出一对不同的元素并删除,直到数组为空或只有一种元素。由于众数的出现次数超过一半,因此最终剩下的元素一定是众数。

    class Solution:def majorityElement(self, nums: List[int]) -> int:count = 0candidate = Nonefor num in nums:if count == 0:candidate = numcount += (1 if num == candidate else -1)return candidate

逐行解释

class Solution:def majorityElement(self, nums: List[int]) -> int:# 初始化计数器为0count = 0# 初始化候选众数为Nonecandidate = None# 遍历数组中的每个元素for num in nums:# 当计数器为0时,意味着之前的候选众数已被抵消完# 此时将当前元素设为新的候选众数if count == 0:candidate = num# 如果当前元素等于候选众数,计数器加1# 否则计数器减1(相当于一对不同元素相互抵消)count += (1 if num == candidate else -1)# 由于众数出现次数超过一半,最终候选众数即为所求众数return candidate

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

相关文章:

  • C++ class和struct的区别
  • AI专题:如何把DeepSeek变成你的AI个人助手
  • 虚拟环境中的PyQt5 Pycharm设置参考
  • 多态的总结
  • http协议和session会话
  • 变革性的聚变路线:基于FRC构型的可控核聚变
  • leetcode 862. 和至少为 K 的最短子数组
  • 2025深圳国际无人机展深度解析:看点、厂商与创新亮点
  • 何谓第二大脑?读书笔记
  • 进一步学习线程相关知识
  • 《打破枷锁:Python多线程GIL困境突围指南》
  • AUTOSAR图解==>AUTOSAR_SRS_LIN
  • 【MySQL】第十弹——事务
  • 夏日旅行(广度优先搜索)
  • YOLO11解决方案之使用 Streamlit 应用程序进行实时推理
  • Linux-读者写著问题和读写锁
  • 长序列高时空分辨率月尺度温度和降水数据集(1951-2011)
  • Java面向对象 一
  • Elsevier期刊的Latex投稿论文如何设置Table、Fig、Algorithm和交叉引用为天蓝色
  • 【信息系统项目管理师】一文掌握高项常考题型-项目进度类计算
  • 2025年八大员【标准员】考试题库及答案
  • 从 0 到 1!Java 并发编程全解析,零基础入门必看!
  • DAY34打卡
  • 黑马点评-乐观锁/悲观锁/synchronized/@Transactional
  • java刷题(6)
  • Netty学习专栏(三):Netty重要组件详解(Future、ByteBuf、Bootstrap)
  • RPG游戏设计战斗篇——战法牧协同作战体系研究
  • itextpdf根据模板生成pdf导出pdf遇到的问题
  • 【商业分析】充分了解“特性”和“功能”的区别,加强资源的聚焦度。
  • Java中的String的常用方法用法总结