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

05-多数元素

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

 ⌊ n/2 ⌋ 的元素。

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

方法一:哈希表法

通过哈希表来记录每个元素出现的次数,然后找出出现次数大于 ⌊ n/2 ⌋ 的元素。

function majorityElement(nums: number[]): number {const numCount: Record<number, number> = {};const n = nums.length;for (const num of nums) {if (num in numCount) {numCount[num]++;} else {numCount[num] = 1;}if (numCount[num] > Math.floor(n / 2)) {return num;}}return -1; // 理论上不会执行到这里,因为题目保证存在多数元素
}
复杂度分析
  • 时间复杂度:(O(n)),因为只需要对数组进行一次遍历。
  • 空间复杂度:(O(k)),其中 (k) 是数组中不同元素的数量,最坏情况下 (k = n)。

方法二:排序法

由于多数元素出现的次数大于 ⌊ n/2 ⌋,那么排序后数组中间位置的元素一定是多数元素。

function majorityElement(nums: number[]): number {nums.sort((a, b) => a - b);return nums[Math.floor(nums.length / 2)];
}
复杂度分析
  • 时间复 O(n log n)),主要是排序操作的时间复杂度。
  • 空间复杂度:取决于排序算法的实现,一般为 (O(log n))。

方法三:摩尔投票法

这是一种非常高效的算法,它的核心思想是抵消不同元素,最后剩下的元素就是多数元素。

function majorityElement(nums: number[]): number {let candidate = nums[0];let count = 1;for (let i = 1; i < nums.length; i++) {if (nums[i] === candidate) {count++;} else {count--;if (count === 0) {candidate = nums[i];count = 1;}}}return candidate;
}
复杂度分析
  • 时间复杂度:(O(n)),只需要对数组进行一次遍历。
  • 空间复杂度:(O(1)),只使用了常数级的额外空间。

测试代码示例 

const nums = [2, 2, 1, 1, 1, 2, 2];
const result = majorityElement(nums);
console.log("多数元素是:", result);

 在上述三种方法中,摩尔投票法在时间和空间复杂度上表现最优,推荐使用该方法来解决此问题。


http://www.mrgr.cn/news/90163.html

相关文章:

  • 软件工程-软件需求分析基础
  • 【JVM详解三】垃圾回收机制
  • 科研工作中如何高效利用LabVIEW
  • 伺服使能的含义解析
  • 【DeepSeek × Postman】请求回复
  • (done) openMP学习 (Day12: Pairwise同步的陷阱)
  • 推荐系统概述
  • 【医院管理会计专题】2.管理会计:医院运营管理的隐形引擎
  • 【故障排除】ls: command not found 终端命令失效的解决办法
  • 【JavaScript】this 指向由入门到精通
  • Aitken 逐次线性插值
  • 【C语言】#define和typedef的区别
  • 本地部署DeepSeek Nodejs版
  • 2025年1月1日起,美国禁止在食品包装中使用PFAS+PFAS标准办理讲解
  • 【Pandas】pandas Series nunique
  • Python的
  • 大模型基本原理(二)——ChatGPT的工作原理
  • 嵌入式工程师面试准备(客观题准备)
  • 示例代码:C# MQTTS双向认证(客户端)(服务器EMQX)
  • 【清晰教程】通过Docker为本地DeepSeek-r1部署WebUI界面
  • Mac(m1)本地部署deepseek-R1模型
  • QT实现多线程的方法
  • 使用EVE-NG-锐捷实现单臂路由
  • openbmc web/redfish到底层设计(持续更新...)
  • Spring AI 介绍
  • 【操作系统】Linux基本命令