
剑指offer Leetcode 39.数组中出现次数超过一半的数字
发布日期:2021-05-06 23:39:46
浏览次数:9
分类:技术文章
本文共 991 字,大约阅读时间需要 3 分钟。
解法1:哈希表
思想:
用哈希表记录出现的个数,有超过一半的就返回
复杂度:
时间:O(n)
空间:O(n)
代码:
class Solution { public: int majorityElement(vector & nums) { unordered_mapnums_map; for(int i : nums){ ++nums_map[i]; if(2 * nums_map[i] > nums.size()) return i; } return -1; }};
解法2:排序取中间数
思想:
数字出现次数多于一半,那么排序后必定在中间
复杂度:
时间:O(nlogn)
空间:O(1)
代码:
class Solution { public: int majorityElement(vector & nums) { sort(nums.begin(), nums.end()); return nums[nums.size() / 2]; }};
解法3:摩尔投票法
思想:
可以理解成混战极限一换一,不同的两者一旦遇见就同归于尽,最后活下来的值都是相同的,即要求的结果
复杂度:
时间:O(n)
空间:O(1)
代码:
class Solution { public: int majorityElement(vector & nums) { int count = 0, res = 0; for(int i : nums){ //如果count为0,遇到的下一个数设为res if(count == 0) res = i; //遇到不同的数减一(一换一),遇到相同的数加一 count += res == i ? 1 : -1; } return res; }};
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年03月11日 08时13分06秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
硬核观察 | 有人在比特币骗局中损失了 10 个比特币
2019-03-03
使用 top 命令了解 Fedora 的内存使用情况 | Linux 中国
2019-03-03
8皇后问题 递归 函数调用是重点
2019-03-03
1541 +1 *2 ²
2019-03-03
面试别慌!阿里专家带你从【入门+基础+进阶+项目】攻破SpringBoot
2019-03-03
【Java面试】30个 Java 集合面试必备的问题和答案
2019-03-03
华为鸿蒙到底是不是安卓系统套了个壳?
2019-03-03
fragment中recyclerview的重新加载问题
2019-03-03
window程序设计(1):第一个windows程序
2019-03-03
windows程序设计(4):文本输出
2019-03-03
21.2.3总结
2019-03-03
线性代数和数学期望杂题
2019-03-03
【SSL_P2876】2017年东莞市信息学特长生测试题 工程
2019-03-03
【洛谷_P1433】吃奶酪
2019-03-03
Base理论介绍
2019-03-03
volatile关键字和AtomicInteger
2019-03-03
redisTemplate.opsForHash()
2019-03-03
maven生命周期
2019-03-03