码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • leetCode 169. 多数元素 + 摩尔投票法


    169. 多数元素 - 力扣(LeetCode)


    给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 

    大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。



    1. class Solution {
    2. public:
    3. int majorityElement(vector<int>& nums) {
    4. int cand1=0,votes=0;
    5. for(const int& num:nums) {
    6. if(votes == 0) cand1 = num;
    7. // if(cand1 == num) votes++;
    8. // else votes--;
    9. votes += (cand1 == num) ? 1 : -1;
    10. }
    11. return cand1;
    12. }
    13. };

    k值摩尔投票法:(推导看我的往期文章)leetCode 229. 多数元素 II + k值摩尔投票法 + 进阶 + 优化空间-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_41987016/article/details/134097586?spm=1001.2014.3001.5501

    1. class Solution {
    2. public:
    3. // k值摩尔投票法
    4. int k=2;
    5. int majorityElement(vector<int>& nums) {
    6. // 创建返回值
    7. vector<int> res;
    8. // if (nums.empty() || nums.size() == 0) return res;
    9. if (nums.size() == 1) return nums[0];
    10. int n = k-1, m = 2, cands[n][m];
    11. memset(cands, 0, sizeof(cands));
    12. for(int i=0;i
    13. cands[i][0]=nums[0];
    14. // cands[i][1]=0;
    15. }
    16. // 摩尔投票法,分为两个阶段:配对阶段 和 计数阶段
    17. bool voteflag=0;
    18. bool matchflag = 0;
    19. for(const int &num : nums) {
    20. // 给候选人投票
    21. for(int i=0;i
    22. if(cands[i][0] == num) {cands[i][1]++;voteflag=1;break;}
    23. else voteflag=0;//投票失败
    24. }
    25. // 有某个候选人得票
    26. if(voteflag) continue;
    27. // 候选人配对
    28. for(int i=0;i
    29. if(cands[i][1] == 0) {
    30. cands[i][0] = num;
    31. cands[i][1]++;
    32. matchflag=1;
    33. break;
    34. }
    35. else matchflag=0;
    36. }
    37. if(matchflag) continue;
    38. for(int i=0;i
    39. cands[i][1]--;
    40. }
    41. }
    42. // (2) 计数阶段
    43. for(int i=0;i
    44. if(cands[i][1]==0) cands[i][0] = INT_MAX;
    45. cands[i][1]=0;
    46. }
    47. for(const int &num : nums) {
    48. for(int i=0;i
    49. if (cands[i][0] == num ) {
    50. cands[i][1]++;
    51. }
    52. }
    53. for(int i=0;i
    54. if (cands[i][1] > nums.size() / k ) res.push_back(cands[i][0]);
    55. }
    56. return res[0];//这里因为题目要求返回int,有需要可以返回vector
    57. }
    58. };

    我的往期文章:

    LCR 158. 库存管理 II 哈希 / 摩尔投票法-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_41987016/article/details/134094319?spm=1001.2014.3001.5501

  • 相关阅读:
    【Linux】如何在Linux下提交代码到gittee
    LeetCode01
    解决echarts配置滚动(dataZoom)后导出图片数据不全问题
    html5中怎么实现一张图片鼠标悬停变成另一张图片
    u盘就能用:RadiAnt DICOM Viewer CD/DVD 2023.1
    【echart 】legend.icon传递svg图标,图标不显示的原因。
    Ubuntu apt更换国内镜像源,apt 更新源,apt 国内镜像
    ONNX&QLinearConv量化卷积详解
    SpringCloud-10-Eureka:注册服务提供者服务
    Qt基于Qml超链接使用
  • 原文地址:https://blog.csdn.net/weixin_41987016/article/details/134096147
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号