| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> LeetCode 229 求众数 II -> 正文阅读 |
|
[数据结构与算法]LeetCode 229 求众数 II |
LeetCode 229 求众数 II来源:力扣(LeetCode) 博主Github:https://github.com/GDUT-Rp/LeetCode 题目:给定一个大小为 示例 1:
示例 2:
示例 3:
提示:
1
1
1 <= nums.length <=
5
?
1
0
4
5 * 10^4
5?104 解题思路:方法一:map统计个数然后计算判断直观想法map统计各个数的分布情况,然后计算判断是否符合条件。 C++
Golang
Python
复杂度分析 时间复杂度:
O
(
n
)
O(n)
O(n) 方法二:摩根投票法笔者没有想到这个解法,这里参考自 龅牙叔。 有一个对摩尔投票法非常形象的比喻:多方混战。 首先要知道,在任何数组中,出现次数大于该数组长度1/3的值最多只有两个。 我们把这道题比作一场多方混战,战斗结果一定只有最多两个阵营幸存,其他阵营被歼灭。数组中的数字即代表某士兵所在的阵营。 我们维护两个潜在幸存阵营A和B。我们遍历数组,如果遇到了属于A或者属于B的士兵,则把士兵加入A或B队伍中,该队伍人数加一。继续遍历。 如果遇到了一个士兵既不属于A阵营,也不属于B阵营,这时有两种情况: A阵营和B阵营都还有活着的士兵,那么进行一次厮杀,参与厮杀的三个士兵全部阵亡:A阵营的一个士兵阵亡,B阵营的一个士兵阵亡,这个不知道从哪个阵营来的士兵也阵亡。继续遍历。 A阵营或B阵营已经没有士兵了。这个阵营暂时从地球上消失了。那么把当前遍历到的新士兵算作新的潜在幸存阵营,这个新阵营只有他一个人。继续遍历。 大战结束,最后A和B阵营就是初始人数最多的阵营。判断一下A,B的人数是否超过所有人数的三分之一就行了。 C++
Go
Python
时间复杂度:
O
(
n
)
O(n)
O(n) |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:57:24- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |