LeetCode 169. 求众数(摩尔投票)
文章目录
- 1. 题目信息
- 2. 解题思路
- 3. 代码
- 3.1 排序
- 3.2 map计数
- 3.3 摩尔投票
1. 题目信息
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
示例 1:输入: [3,2,3]
输出: 3
示例 2:输入: [2,2,1,1,1,2,2]
输出: 2
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/majority-element
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题思路
- 根据题意肯定存在,先排序,然后返回n/2下标处的值,时间复杂度O(n2)
- 哈希map,查找key,value计数,时间复杂度O(n)
- 摩尔投票法,时间复杂度O(n)
相关题目:LeetCode 229. 求众数 II(摩尔投票)
3. 代码
3.1 排序
class Solution
{public:int majorityElement(vector<int>& nums){sort(nums.begin(),nums.end());return nums[nums.size()/2];}
};
3.2 map计数
class Solution
{public:int majorityElement(vector<int>& nums){unordered_map<int, int> m;for(int i = 0; i < nums.size(); ++i){m[nums[i]]++;if(m[nums[i]] > nums.size()/2)return nums[i];}return 0;}
};
3.3 摩尔投票
class Solution {//摩尔投票
public:int majorityElement(vector<int>& nums) {int i, maj, count = 0, n = 0;for(i = 0; i < nums.size(); ++i){if(count == 0){maj = nums[i];count++;}else{if(maj == nums[i])count++;elsecount--;}}for(i = 0; i < nums.size(); ++i){if(maj == nums[i])n++;}if(n > nums.size()/2)return maj;return -1;}
};
《剑指Offer》同题:面试题39. 数组中出现次数超过一半的数字
LeetCode 169. 求众数(摩尔投票)相关推荐
- leetcode.169 求众数
给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在众数. // 示例1 输入: [3,2,3] 输出: ...
- Leetcode:169. 求众数
题目链接 求众数 题目描述 给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在众数. 示例 1: 输入: ...
- Leetcode 169. 求众数 解题思路及C++实现
解题思路: 因为int型数值只有32位,使用位运算的方法来解这道题时,就是要确定这个众数,在32位的位置上分别是0还是1. 由题意,因为众数的个数超过n/2,所以遍历数组nums后,如果某一位置上1的 ...
- LeetCode 169.求众数
题目描述: 给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在众数. 示例 1: 输入: [3,2,3] ...
- LeetCode 229. 求众数 II(摩尔投票)
1. 题目 给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素. 说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1). 示例 1: 输入: [3,2,3] 输出: ...
- splay + 线段树 ---- P3765总统选举 [带修改的动态区间众数 摩尔投票+n棵splay]
题目链接 题目大意: 解题思路: 1.摩尔投票法: 题意是找n个数内出现次数大于n/2的数 保证存在这个数用的方法叫做摩尔投票法 首先我们注意到这样一个现象: 在任何数组中,出现次数大于该数组长度一半 ...
- java求众数_Java实现 LeetCode 229 求众数 II(二)
229. 求众数 II 给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素. 说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1). 示例 1: 输入: [3,2, ...
- [leetcode]229. 求众数 II
解题思路:题目要求空间复杂度为O(1) 大于1/3的数不会超过2个,利用Boyer-Moore 投票算法找到数量最多的两个数,再检查下这俩个数的数量有没有超过1/3 class Solution {p ...
- 领扣问题169. 求众数 python解决方案
欢迎和我一起学习啊! 给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在众数. 示例 1: 输入: [3 ...
最新文章
- 别让低效努力,毁了你
- mysql Communications link failure druid
- 利用ABAP调试模式修改SE16里数据库表的内容
- 路由器和网关的区别?
- 详解NLP技术中的:预训练模型、图神经网络、模型压缩、知识图谱
- 红外解码软件 android,一文教会你红外线遥控器软件解码程序
- js 多个input值拼接json字符串
- php 保存错误日志,PHP中把错误日志保存在系统日志中_PHP教程
- VOIP Codec 三剑客之 ISAC/ILBC -- ISAC (4) Pitch Parameters Encode 模块
- 《QML 基础教程》
- 联想SR158 安装CentOS7系统
- 安兔兔html5测试跑分榜,2021年最新安兔兔手机性能跑分排行榜
- 1741. Communication Fiend(dp)
- 域控服务器里没有internet时间,加入域之后,【Internet 时间】选项没有了
- 阿里云ACP认证之云服务器ECS知识整理(考题占比 31%)
- 使用java在后台将数据导出为excel文件
- 联邦学习综述(二)——联邦学习的分类、框架及未来研究方向
- 石墨烯/PEDOT 水凝胶
- Netty私有协议栈 读书笔记
- 2019年手机会出现什么?四镜头、屏幕挖孔、折迭手机