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

力扣HOT100之技巧:169. 多数元素


这道题如果不考虑空间复杂度和时间复杂度的限制的话很好做,一种思路是通过一次遍历将所有元素的数量记录在一个哈希表中,然后我们直接返回出现次数最多的键即可。另一种思路是直接对数组进行排序,数组中间的值一定是多数元素,因为该元素超过半数,在有序的状态下,无论如何都会在数组的中间位置出现,这个也很好想。
但是考虑时间和空间的限制,这道题就很难想了,这道题我是看了华南溜达虎的视频才做出来的,感觉他对摩尔投票法讲解的还不错,也可以结合K神的题解来看,更加通俗易懂。
我们定义countresultresult代表多数元素,而count对应多数元素的数量,初始化为0,我们先假定nums[0]为多数元素,遍历整个数组nums,当nums[i] == result时,我们将当前多数元素的数量+1,然后遍历下一个元素,当nums[i] != result时,我们就将count减一,当count被减为负数时,说明当前认定的多数元素可能不是真正的多数元素,我们将result赋值为当前的nums[i],并将count赋值为1(对应当前多数元素的数量)
经历过一次遍历后,由于多数的数量超过半数(至少比其他的元素个数之和多1),无论数组如何排列,最后一定是多数的票数占优,最后result一定会被赋值为多数。

class Solution {
public:int majorityElement(vector<int>& nums) {int count = 0;int result = nums[0];for(int i = 0; i < nums.size(); i++){if(nums[i] == result)count++;else{count--;if(count < 0){result = nums[i];count = 1;}   }}return result;}
};
http://www.xdnf.cn/news/13692.html

相关文章:

  • 【Zephyr 系列 21】OTA 升级与产测系统集成:远程配置、版本验证、自动回滚机制设计
  • 请问黑盒测试和白盒测试有哪些方法?
  • 力扣-198.打家劫舍
  • leetcode HOT100(49.字母异位词分组)
  • 怎样解决在ubuntu 22.04上QT: DataVisualization控件显示黑屏的问题
  • 触觉智能RK3576核心板工业应用之软硬件全国产化,成功适配开源鸿蒙OpenHarmony5.0
  • LangGraph--带记忆和工具的聊天机器人
  • Modbus TCP转DeviceNet网关连接ABB变频器配置案例
  • 破解关键领域软件测试“三重难题”:安全、复杂性、保密性
  • 电脑、手机长时间不关机可以吗
  • Rabbitmq后台无法登录问题解决
  • Genio 1200 Evaluation MT8395平台安装ubuntu
  • 全栈监控系统架构
  • 22、话题重名及解决方案
  • 销售预测的方法与模型(二)丨商品与库存分类——基于数据模型运营的本质和底层逻辑销售
  • Spring MVC 入门案例:从代码到原理的深度剖析
  • Docker 构建文件代码说明文档
  • qemu-kvm+virt-manager创建虚拟机设置桥接模式
  • 告别手动做PPT!4款AI工具实现自动化生成
  • Python—turtle绘图库使用方法
  • 【论文阅读笔记】高光反射实时渲染新突破:3D Gaussian Splatting with Deferred Reflection 技术解析
  • 技术专栏|LLaMA家族——模型架构
  • 算法学习笔记:2.大根堆算法——数据流的中位数​​or最后一块石头的重量
  • 【Redisson】锁可重入原理
  • Redis初识第一期
  • 从0到1构建高并发秒杀系统:实战 RocketMQ 异步削峰与Redis预减库存
  • 接口测试常用工具及测试方法(基础篇)
  • 【MySQL】视图
  • 电话号码的字母组合
  • 12.ack,ACK 的区别与含义