给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 你的算法应该在O(1)空间中以线性时间运行。

详见:https://leetcode.com/problems/majority-element-ii/description/

摩尔投票法 Moore Voting

Java实现:

  1. class Solution {
  2. public List<Integer> majorityElement(int[] nums) {
  3. List<Integer> res=new ArrayList<Integer>();
  4. if(nums==null||nums.length==0){
  5. return res;
  6. }
  7. int a=nums[0],cnta=0;
  8. int b=nums[0],cntb=0;
  9. for (int num : nums) {
  10. if (num == a) {
  11. ++cnta;
  12. }else if(num == b) {
  13. ++cntb;
  14. }else if(cnta == 0) {
  15. a = num;
  16. cnta=1;
  17. }else if(cntb == 0) {
  18. b = num;
  19. cntb=1;
  20. }else{
  21. --cnta;
  22. --cntb;
  23. }
  24. }
  25. cnta=0;
  26. cntb=0;
  27. for(int num:nums){
  28. if(num==a){
  29. ++cnta;
  30. }else if(num==b){
  31. ++cntb;
  32. }
  33. }
  34. if(cnta>nums.length/3){
  35. res.add(a);
  36. }
  37. if(cntb>nums.length/3){
  38. res.add(b);
  39. }
  40. return res;
  41. }
  42. }

C++实现:

  1. class Solution {
  2. public:
  3. vector<int> majorityElement(vector<int>& nums) {
  4. vector<int> res;
  5. int m = 0, n = 0, cm = 0, cn = 0;
  6. for (auto &a : nums)
  7. {
  8. if (a == m)
  9. {
  10. ++cm;
  11. }
  12. else if (a ==n)
  13. {
  14. ++cn;
  15. }
  16. else if (cm == 0)
  17. {
  18. m = a, cm = 1;
  19. }
  20. else if (cn == 0)
  21. {
  22. n = a, cn = 1;
  23. }
  24. else
  25. {
  26. --cm, --cn;
  27. }
  28. }
  29. cm = cn = 0;
  30. for (auto &a : nums)
  31. {
  32. if (a == m)
  33. {
  34. ++cm;
  35. }
  36. else if (a == n)
  37. {
  38. ++cn;
  39. }
  40. }
  41. if (cm > nums.size() / 3)
  42. {
  43. res.push_back(m);
  44. }
  45. if (cn > nums.size() / 3)
  46. {
  47. res.push_back(n);
  48. }
  49. return res;
  50. }
  51. };

参考:https://www.cnblogs.com/grandyang/p/4606822.html

229 Majority Element II 求众数 II的更多相关文章

  1. Leetcode#169. Majority Element(求众数)

    题目描述 给定一个大小为 n 的数组,找到其中的众数.众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素. 你可以假设数组是非空的,并且给定的数组总是存在众数. 示例 1: 输入: [3,2,3] ...

  2. 229. Majority Element II求众数II

    网址:https://leetcode.com/problems/majority-element-ii/ 参考:https://blog.csdn.net/u014248127/article/de ...

  3. leetcode 169. Majority Element 、229. Majority Element II

    169. Majority Element 求超过数组个数一半的数 可以使用hash解决,时间复杂度为O(n),但空间复杂度也为O(n) class Solution { public: int ma ...

  4. 229. 求众数 II

    Q: 给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素. 说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1). 示例 1: 输入: [3,2,3] 输出: [3 ...

  5. Java实现 LeetCode 229 求众数 II(二)

    229. 求众数 II 给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素. 说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1). 示例 1: 输入: [3,2, ...

  6. Leetcode 229.求众数II

    求众数II 给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素. 说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1). 示例 1: 输入: [3,2,3] 输出: ...

  7. [LeetCode] Majority Element II 求众数之二

    Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algorit ...

  8. 【刷题-LeetCode】229. Majority Element II

    Majority Element II Given an integer array of size n, find all elements that appear more than ⌊ n/3 ...

  9. 【LeetCode】229. Majority Element II

    Majority Element II Given an integer array of size n, find all elements that appear more than ⌊ n/3 ...

随机推荐

  1. Office PDF如何旋转页面之后保存

    直接视图-旋转视图-逆时针,是不行的,旋转之后无法保存,另存为之后也再打开也没有效果.   要点击视图-工具-页面   然后在右边的菜单中点击旋转,然后执行旋转,然后就可以保存了.        

  2. A7139 无线通信驱动(STM32) 添加FIFO扩展模式,能够发送超大数据包

    A7139 拥有电磁波唤醒以及10mW的发射功率,很easy实现长距离通信,眼下測试有障碍物能够轻松达到300m以上. 通过几天的调试,眼下能够发送随意大小的数据包,大小为1-16KB.所有使用中断收 ...

  3. 数据结构与算法问题 AVL二叉平衡树

    AVL树是带有平衡条件的二叉查找树. 这个平衡条件必须保持,并且它必须保证树的深度是O(logN). 一棵AVL树是其每一个节点的左子树和右子树的高度最多差1的二叉查找树. (空树的高度定义为-1). ...

  4. 【iOS系列】-使用CAGradientLayer设置渐变色

    有时候iOS开发中需要使用到渐变色,来给图片或者view盖上一层,使其显示效果更好,我们这里使用的CAGradientLayer来设置渐变色 要实现的效果如下: Demo地址---下载 // 创建渐变 ...

  5. SQLServer导出导出单表数据

    1.SQLServer导出单表数据为TXT文件 数据库--任务--导出数据

  6. make eval builtin function

    1 eval的返回值是空字符串,因此它可以用于Makefile的任何位置而不引起错误 2 eval函数的作用效果 生成Makefile的动态部分,即eval用于增加Makefile的构成部分. 也就是 ...

  7. Filter 详解

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...

  8. 在调试状态查看DateTable里的数据信息

  9. mongo04---基本查询

    核心: mongod: 数据库核心进程 mongos: 查询路由器,集群时用 mongo: 交互终端(客户端) 二进制导出导入: mongodump:导出bson数据 mongorestore: 导入 ...

  10. beego6

    package main //beego使用的是go语言原生的模版 import ( //_ "beego1/routers" //默认controll文件夹里面的控制器 &quo ...