每天一道LeetCode-----摩尔投票法寻找给定数组中出现个数大于n/2或n/3的元素
Majority Element
原题链接Majority Element
给定一个数组,元素个数为n,找出出现次数大于n/2的那个元素
摩尔投票法思想
每次从数组中选择两个不相等的元素进行相互抵消(删除),最后剩下的一个元素或几个相同的元素就是出现次数大于n/2的元素
代码如下
class Solution {
public:int majorityElement(vector<int>& nums) {int major = 0, count = 0;for(auto& n : nums){if(major == n) ++count;else if(count == 0) major = n, count = 1;else --count;}return major;}
};
Majority Element II
原题链接Majority Element II
找到所有出现次数大于n/3的元素,显然最多只能有两个,同样利用摩尔投票法
代码如下
class Solution {
public:vector<int> majorityElement(vector<int>& nums) {int y = 0, z = 0, cy = 0, cz = 0;for(auto& x : nums){if(y == x) ++cy;else if(z == x) ++cz;else if(cy == 0) y = x, cy = 1;else if(cz == 0) z = x, cz = 1;else --cy, --cz;}cy = cz = 0;for(auto& x : nums){if(y == x) ++cy;else if(z == x) ++cz;}vector<int> res;if(cy > nums.size() / 3) res.push_back(y);if(cz > nums.size() / 3) res.push_back(z);return res;}
};
每天一道LeetCode-----摩尔投票法寻找给定数组中出现个数大于n/2或n/3的元素相关推荐
- 摩尔投票法(Boyer–Moore majority vote algorithm)
参考资料 论文MJRTY A Fast Majority Vote Algorithm 算法演示网站 维基百科 算法解读 概述 摩尔投票法(Boyer–Moore majority vote algo ...
- 【LeetCode笔记】169. 多数元素(Java、摩尔投票法、哈希表)
文章目录 题目描述 思路 & 代码 思路一:哈希表 思路二: 摩尔投票法 题目描述 好家伙,这是今天最有意思的题目了 思路 & 代码 思路一:哈希表 先说缺点:空间复杂度O(n) 一次 ...
- 动态规划和摩尔投票法
动态规划 维基百科对动态规划(Dynamic programming,简称DP)的定义是一种在数学.管理科学.计算机科学.经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问 ...
- C语言刷题之摩尔投票法
目录 1.引入 2.摩尔投票算法 3.基本步骤 摩尔投票法分为两个阶段: 1.抵消阶段 2.检验阶段 4.代码实现 5.扩展沿伸 6.总结 1.引入 我们来看一个问题: 假设有一个无序数组长度为n,要 ...
- 小小算法,可笑可笑——摩尔投票法(集万家之长)
摩尔投票法 不多说,先上题目. 问题描述:leetcode 229题 给定一个大小为 n 的整数数组,找出其中的所有的出现超过 ⌊ n/3 ⌋ 次的元素. 这还不简单!直接暴力计数,上map,easy ...
- [剑指offer][JAVA]面试题第[39]题[数组中出现次数超过一半的数字][HashMap][摩尔投票法]
[问题描述][简单] 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.你可以假设数组是非空的,并且给定的数组总是存在多数元素.示例 1:输入: [1, 2, 3, 2, 2, 2, 5, ...
- 摩尔投票法(力扣- -229. 求众数 II)
摩尔投票法(力扣- -229. 求众数 II) 文章目录 摩尔投票法(力扣- -229. 求众数 II) 一.题目描述 二.分析 摩尔投票法 总结 三.代码 一.题目描述 二.分析 这道题如果用O(N ...
- 2020年 Moore majority vote algorithm 摩尔投票法知多少
第一眼看到这个题目,想到的是使用Map来统计出现频次,然后遍历找出频次大于n/2的元素. class Solution {public int majorityElement(int[] nums) ...
- 每天一道LeetCode-----找到给定数组中第三大的值
原题链接Third Maximum Number 要求找到给定数组中第三大的数.其中第一大的数,第二大的数,第三大的数互不相同,即严格的小于关系.并且规定时间复杂度是O(n).另外如果找不到第三大的数 ...
最新文章
- 第三篇:时间和全局状态(三)
- Vue.js 条件渲染 v-if、v-show、v-else
- Python 数据结构与算法 —— 插入排序
- 安卓手机qq怎么看密友值_qq密友值在哪看
- 分享提高php编程效率的方法
- Jfree 数据可视化
- Android逆向分析之dex2jar异常处理的几种情况
- 使用微软原生工具,反编译DLL并修改后再生成DLL
- MQL5 编程基础:列表
- MMPlayer同步文件到手机应用中的方法
- 手机无线访问计算机文件夹,电脑怎么通过无线wifi读取手机文件
- django mysql sql语句_Django笔记:连接数据库并执行SQL语句
- 沟通的艺术:看人入里,看出人外 - part 1
- socket编程——upd(数据报套接字)
- IllegalArgumentException: wrong number of arguments
- 快讯| RStudio Connect 发布
- trainging contest#1(2011大连现场赛)C BY bly
- rasa x The path ‘config.yml‘ does not exist. Please make sure to use the default location
- 多边形快速凸包算法(Melkman‘s Algorithm)
- [源码和文档分享]基于QT实现的联网国际跳棋游戏
热门文章
- ras私钥c#转java_C#RSA对接JAVA中RSA方式代码实例
- CCF201809(Java)
- 第四章:通过:driver.getAttribute(value); 获取value的值
- find 和 DOM遍历孰快孰慢~
- 随机猜拳判断胜利(思路,逻辑正确不完美)if switch
- poj 2513 Colored Sticks( 字典树哈希+ 欧拉回路 + 并查集)
- Some Experience about userControls
- 和 的运算(值)结果 及 Boolean结果
- 【计算机图形学课程】二.MFC鼠标响应函数模拟画图软件
- 【数字图像处理】七.MFC图像增强之图像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt锐化详解