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的元素相关推荐

  1. 摩尔投票法(Boyer–Moore majority vote algorithm)

    参考资料 论文MJRTY A Fast Majority Vote Algorithm 算法演示网站 维基百科 算法解读 概述 摩尔投票法(Boyer–Moore majority vote algo ...

  2. 【LeetCode笔记】169. 多数元素(Java、摩尔投票法、哈希表)

    文章目录 题目描述 思路 & 代码 思路一:哈希表 思路二: 摩尔投票法 题目描述 好家伙,这是今天最有意思的题目了 思路 & 代码 思路一:哈希表 先说缺点:空间复杂度O(n) 一次 ...

  3. 动态规划和摩尔投票法

    动态规划 维基百科对动态规划(Dynamic programming,简称DP)的定义是一种在数学.管理科学.计算机科学.经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问 ...

  4. C语言刷题之摩尔投票法

    目录 1.引入 2.摩尔投票算法 3.基本步骤 摩尔投票法分为两个阶段: 1.抵消阶段 2.检验阶段 4.代码实现 5.扩展沿伸 6.总结 1.引入 我们来看一个问题: 假设有一个无序数组长度为n,要 ...

  5. 小小算法,可笑可笑——摩尔投票法(集万家之长)

    摩尔投票法 不多说,先上题目. 问题描述:leetcode 229题 给定一个大小为 n 的整数数组,找出其中的所有的出现超过 ⌊ n/3 ⌋ 次的元素. 这还不简单!直接暴力计数,上map,easy ...

  6. [剑指offer][JAVA]面试题第[39]题[数组中出现次数超过一半的数字][HashMap][摩尔投票法]

    [问题描述][简单] 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.你可以假设数组是非空的,并且给定的数组总是存在多数元素.示例 1:输入: [1, 2, 3, 2, 2, 2, 5, ...

  7. 摩尔投票法(力扣- -229. 求众数 II)

    摩尔投票法(力扣- -229. 求众数 II) 文章目录 摩尔投票法(力扣- -229. 求众数 II) 一.题目描述 二.分析 摩尔投票法 总结 三.代码 一.题目描述 二.分析 这道题如果用O(N ...

  8. 2020年 Moore majority vote algorithm 摩尔投票法知多少

    第一眼看到这个题目,想到的是使用Map来统计出现频次,然后遍历找出频次大于n/2的元素. class Solution {public int majorityElement(int[] nums) ...

  9. 每天一道LeetCode-----找到给定数组中第三大的值

    原题链接Third Maximum Number 要求找到给定数组中第三大的数.其中第一大的数,第二大的数,第三大的数互不相同,即严格的小于关系.并且规定时间复杂度是O(n).另外如果找不到第三大的数 ...

最新文章

  1. 第三篇:时间和全局状态(三)
  2. Vue.js 条件渲染 v-if、v-show、v-else
  3. Python 数据结构与算法 —— 插入排序
  4. 安卓手机qq怎么看密友值_qq密友值在哪看
  5. 分享提高php编程效率的方法
  6. Jfree 数据可视化
  7. Android逆向分析之dex2jar异常处理的几种情况
  8. 使用微软原生工具,反编译DLL并修改后再生成DLL
  9. MQL5 编程基础:列表
  10. MMPlayer同步文件到手机应用中的方法
  11. 手机无线访问计算机文件夹,电脑怎么通过无线wifi读取手机文件
  12. django mysql sql语句_Django笔记:连接数据库并执行SQL语句
  13. 沟通的艺术:看人入里,看出人外 - part 1
  14. socket编程——upd(数据报套接字)
  15. IllegalArgumentException: wrong number of arguments
  16. 快讯| RStudio Connect 发布
  17. trainging contest#1(2011大连现场赛)C BY bly
  18. rasa x The path ‘config.yml‘ does not exist. Please make sure to use the default location
  19. 多边形快速凸包算法(Melkman‘s Algorithm)
  20. [源码和文档分享]基于QT实现的联网国际跳棋游戏

热门文章

  1. ras私钥c#转java_C#RSA对接JAVA中RSA方式代码实例
  2. CCF201809(Java)
  3. 第四章:通过:driver.getAttribute(value); 获取value的值
  4. find 和 DOM遍历孰快孰慢~
  5. 随机猜拳判断胜利(思路,逻辑正确不完美)if switch
  6. poj 2513 Colored Sticks( 字典树哈希+ 欧拉回路 + 并查集)
  7. Some Experience about userControls
  8. 和 的运算(值)结果 及 Boolean结果
  9. 【计算机图形学课程】二.MFC鼠标响应函数模拟画图软件
  10. 【数字图像处理】七.MFC图像增强之图像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt锐化详解