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

169.多数元素

题目

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

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

解题思路

方法一:使用HashMap集合,统计每个元素的出现次数,返回出现次数大于数组长度一半的元素。
时间复杂度:O(n),空间复杂度O(n)
方法二:排序,由于一定存在多数元素,直接返回中间元素就是多数元素。
时间复杂度:O(nlogn),空间复杂度:O(logn)
方法三:摩尔投票,思想是多数元素与其他元素抵消,候选元素记录当前的多数元素,计数器归0时需要更新候选元素。
时间复杂度:O(n),空间复杂度O(1)

代码

方法一:HashMap集合

class Solution {public int majorityElement(int[] nums){// 1. 将数组元素及其出现的次数存放在Map集合中Map<Integer,Integer> countMap = new HashMap<>();for(int num : nums){countMap.put(num, countMap.getOrDefault(num, 0) + 1);}// 2. 遍历Map集合,要将Map集合转换为entry对象for(Map.Entry<Integer, Integer> entry : countMap.entrySet()){// 3. 如果对应entry对象的value大于数组长度的一般直接返回对应的keyif(entry.getValue() > nums.length / 2){return entry.getKey();}}return -1;}
}

方法二:排序法

class Solution {public int majorityElement(int[] nums) {// 1. 对数组进行排序Arrays.sort(nums);// 2. 返回中间的元素return nums[nums.length/2];}
}

方法三:摩尔法

class Solution {public int majorityElement(int[] nums) {int count = 0;int condidate = 0;for (int num : nums) {// 1. 如果计数器为0,候选元素为当前元素if (count == 0) {condidate = num;}// 2. 遍历时更新count的值count += (condidate == num ? 1 : -1);}return condidate;}
}
http://www.xdnf.cn/news/327223.html

相关文章:

  • openstack虚拟机状态异常处理
  • java集合菜鸟教程
  • 从 CodeBuddy Craft 到 edgeone-pages-mcp 上线算命网站的一次完整体验分享
  • 多语言网站的 UX 陷阱与国际化实践陷阱清单
  • 前端面试每日三题 - Day 27
  • 【Python】os模块
  • 使用 Gradio + Qwen3 + vLLM 部署 Text2SQL 多表查询系统
  • 【Prometheus】深入解析 Prometheus 特殊标签 `__param_<name>`:动态抓取参数的艺术
  • Android 数据持久化之数据库存储 Room 框架
  • 50个精选DeepSeek指令
  • ifconfig statistics
  • springboot使用阿里云OSS实现文件上传
  • 云上玩转Qwen3系列之二:PAI-LangStudio搭建联网搜索和RAG增强问答应用
  • C++初阶 —— 类和对象
  • C++ 中的 `it->second` 和 `it.second`:迭代器与对象访问的微妙区别
  • 如何延长电脑使用寿命?
  • Cadence 高速系统设计流程及工具使用二
  • 学习黑客 Linux用户管理
  • Linux理解文件fd
  • 热部署相关
  • 说说es配置项的动态静态之分和集群配置更新API
  • Filecoin矿工资金管理指南:使用lotus-shed actor withdraw工具
  • Kubernetes学习笔记
  • 浅谈图像分割中预测图与标签图的对应关系
  • C++面向对象设计类的核心知识详解总述(1)
  • Spring 与 MyBatis 整合时的事务管理细节
  • 如何使用docker配置ros-noetic环境并使用rviz,gazebo
  • Nvidia-smi 运行失败(Failed to initialize NVML: Driver/library version mismatch)
  • Elasticsearch 8.x 在 java 中的使用情况
  • MIT关节电机相序校准