【leetcode】摩尔投票算法

news/2025/1/10 19:25:44/

原题:169. 多数元素

给定一个大小为 n 的数组 nums ,返回其中的多数元素多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素

示例 1:
输入:nums = [3,2,3]
输出:3

示例 2:
输入:nums = [2,2,1,1,1,2,2]
输出:2

提示:
n == nums.length
1 <= n <= 5 * 104
-109 <= nums[i] <= 109

进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。

本题不考虑复杂度限制不难解决,难点在于进阶部分,要求时间复杂度O(n) & 空间复杂度O(1),昨天下班到现在没有想出好的解决办法,通过AI了解到可以通过摩尔投票算法解决。

摩尔投票算法的思想是,将每一个元素视为一个潜在的候选元素,开始选择第一个元素为候选元素并计票。往后每出现一个和候选元素相同的元素票数+1,不相同的元素票数-1。当第一个选定的候选元素票数为0时表明截止此时存在相同数量个不同于候选元素的其他元素,所以它们之间可以“抵消”(因为题意中的多数元素是指过半的元素),抵消之后重新选择下一个元素为候选元素。这样重复抵消之后剩下的元素一定是过半的元素。

from typing import Listclass Solution:def majorityElement(self, nums: List[int]) -> int:cnt, candidate = 0, Nonefor num in nums:if cnt == 0:candidate = numcnt += (1 if num == candidate else -1)return candidateif __name__ == '__main__':s = Solution()print(s.majorityElement([3, 2, 3]))  # 3print(s.majorityElement([2, 2, 1, 1, 1, 2, 2]))  # 2

算法仅当输入中存在绝对过半(⌊n/2⌋+1)的元素才会保证返回正确值。

⌊x⌋:向下取整。

该问题还可以进一步变种求出现次数大于 k n \frac{k}{n} nk的元素,n为输入元素长度。
https://kimi.moonshot.cn/share/ctuan8mf5kufi6mnh4mg


http://www.ppmy.cn/news/1562042.html

相关文章

ARM主板定制流程与成本

在当今快速发展的科技环境中&#xff0c;定制化的硬件解决方案越来越受到企业和开发者的青睐。ARM架构作为一种高效能、低功耗的处理器架构&#xff0c;广泛应用于嵌入式系统、移动设备和物联网设备等领域。为了满足特定应用需求&#xff0c;企业往往需要对ARM主板进行定制。本…

当你买了一台Linux云主机,应该如何测试主机性能?

现在这个时代云主机露脸的次数越来越多&#xff0c;距离我在阿里云开通第一台云主机马上就满10年了。当然&#xff0c;我先还还有一些云主机在稳定运行&#xff08;我用100块钱把物理服务器放到了公网&#xff0c;省了几万块&#xff01;&#xff09;&#xff0c;除了在香港的系…

添加到 PATH 环境变量中

命令解释 # 将命令中的<CLI_PATH>替换为您aliyun文件的所在目录。 echo export PATH$PATH:<CLI_PATH> >> ~/.bash_profile echo export PATH$PATH:/data2/ljsang/aliyun/aliyun >> ~/.bash_profileexport PATH$PATH:/data2/ljsang/aliyun/aliyun&…

IT面试求职系列主题-人工智能(一)

想成功求职&#xff0c;必要的IT技能一样不能少&#xff0c;再从人工智能基础知识来一波吧。 1&#xff09;您对人工智能的理解是什么&#xff1f; 人工智能是计算机科学技术&#xff0c;强调创造能够模仿人类行为的智能机器。这里智能机器可以定义为能够像人一样行动、像人一…

爬虫基础之爬取某基金网站+数据分析

声明: 本案例仅供学习参考使用&#xff0c;任何不法的活动均与本作者无关 网站:天天基金网(1234567.com.cn) --首批独立基金销售机构-- 东方财富网旗下基金平台! 本案例所需要的模块: 1.requests 2.re(内置) 3.pandas 4.pyecharts 其他均需要 p…

根据中文名称首字母进行分组

很多项目中&#xff0c;需要用到中文名称到首字母进行分组&#xff0c;例如&#xff1a;城市、游戏等等。。。 /*** 将集合数据按照汉字首字母分组排序** param list* return*/public Map<String, Object> screenManufacturer(List<Game> list) {Set<String>…

2025新春烟花代码(二)HTML5实现孔明灯和烟花效果

效果展示 源代码 <!DOCTYPE html> <html lang"en"> <script>var _hmt _hmt || [];(function () {var hm document.createElement("script");hm.src "https://hm.baidu.com/hm.js?45f95f1bfde85c7777c3d1157e8c2d34";var …

Appium版本升级,需要注意哪些点:使用UiAutomator2Options传递capabilities

mac上安装的是较新的Appium版本&#xff0c;在跑之前写的Android UI 自动化代码时报错&#xff1a;AttributeError: dict object has no attribute to_capabilities。 查了一下资料&#xff0c;这是因为较新的 Selenium 和 Appium 版本要求使用 Options 类来定义能力&#xff…