当前位置: 首页 > news >正文

leetCode 229. 多数元素 II + 摩尔投票法 + 进阶 + 优化空间

229. 多数元素 II - 力扣(LeetCode)


给定一个大小为 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。

进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1)的算法解决此问题。 


(1)哈希表

class Solution {
public:// 哈希vector<int> majorityElement(vector<int>& nums) {unordered_map<int,int> mp;for(const int& a:nums) mp[a]++;int n = nums.size() / 3;int i=0;vector<int> ans;for(auto &it:mp) {if(it.second > n) ans.push_back(it.first); }return ans;}
};

(2) 摩尔投票法

class Solution {
public:// 摩尔投票法vector<int> majorityElement(vector<int>& nums) {// 创建返回值vector<int> res;if (nums.empty() || nums.size() == 0) return res;// 初始化两个候选人candidate,和他们的计票int cand1 = nums[0],count1 = 0;int cand2 = nums[0],count2 = 0;// 摩尔投票法,分为两个阶段:配对阶段 和 计数阶段// (1) 配对阶段for(const int &num : nums) {// 投票if(cand1 == num) {count1++;continue;}if(cand2 == num) {count2++;continue;}// 第 1 个候选人配对if(count1 == 0) {cand1 = num;count1++;continue;}// 第 2 个候选人配对if(count2 == 0) {cand2 = num;count2++;continue;}count1--;count2--;}// (2)计数阶段 : 找到了两个候选人之后,需要确定票数是否满足大于 N/3count1=0;count2=0;for(const int &num : nums) {if (cand1 == num) count1++;else if (cand2 == num) count2++;}if (count1 > nums.size() / 3) res.push_back(cand1);if (count2 > nums.size() / 3) res.push_back(cand2);return res;}
};

推荐和参考文章:

229. 多数元素 II - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/majority-element-ii/solutions/123170/liang-fu-dong-hua-yan-shi-mo-er-tou-piao-fa-zui-zh/229. 多数元素 II - 力扣(LeetCode)icon-default.png?t=N7T8https://leetcode.cn/problems/majority-element-ii/solutions/1060343/gong-shui-san-xie-noxiang-xin-ke-xue-xi-ws0rj/

相关文章:

  • LeetCode刷题:27. 移除元素
  • uniapp把文件中的内复制到另一个文件中
  • RTCM数据解码
  • C# Winform编程(9)网络编程
  • 基于图像识别的自动驾驶汽车障碍物检测与避障算法研究
  • 如何批量给视频添加logo水印?
  • Cookie技术
  • 父子项目打包发布至私仓库
  • vue3 + Element-plus + Echarts 5.2 切换不更新、导出PDF不显示 解决方案
  • Linux系统下DHCP服务安装部署和使用实例详解(蜜罐)
  • 031-从零搭建微服务-监控中心(一)
  • SSH 22
  • 酷开科技依托酷开系统推动家庭智能化加速发展
  • 【开源】基于SpringBoot的城市桥梁道路管理系统的设计和实现
  • vue中如何给后端过来的数组中每一个对象加一个新的属性和新的对象(不影响后端的原始数据)
  • 【EOS】Cleos基础
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • Codepen 每日精选(2018-3-25)
  • CSS3 变换
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • download使用浅析
  • input的行数自动增减
  • interface和setter,getter
  • Javascript Math对象和Date对象常用方法详解
  • java中具有继承关系的类及其对象初始化顺序
  • JS基础之数据类型、对象、原型、原型链、继承
  • Laravel核心解读--Facades
  • Vue.js源码(2):初探List Rendering
  • 成为一名优秀的Developer的书单
  • 服务器从安装到部署全过程(二)
  • 记一次和乔布斯合作最难忘的经历
  • 前嗅ForeSpider采集配置界面介绍
  • 深度学习入门:10门免费线上课程推荐
  • 十年未变!安全,谁之责?(下)
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 写代码的正确姿势
  • 学习HTTP相关知识笔记
  • 赢得Docker挑战最佳实践
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 移动端高清、多屏适配方案
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #HarmonyOS:Web组件的使用
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (8)STL算法之替换
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (LeetCode) T14. Longest Common Prefix
  • (实战篇)如何缓存数据
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (一)Thymeleaf用法——Thymeleaf简介
  • (已解决)什么是vue导航守卫
  • (转)EXC_BREAKPOINT僵尸错误
  • ./configure、make、make install 命令