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

【面试经典150题】多数元素

🔗题目链接

题目描述

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

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

⌊ n/2 ⌋表示n/2结果向下取整。

🚆数据范围

  • n == nums.length
  • 1 <= n <= 5 * 104
  • -109 <= nums[i] <= 109

🍁思路分析:

因为 ⌊ n 2 ⌋ ≤ n 2 < ⌊ n 2 ⌋ + 1 \lfloor \frac{n}{2} \rfloor \le \frac{n}{2} < \lfloor \frac{n}{2} \rfloor + 1 2n2n<2n+1,所以这个 多数元素 至多只有1个。

🖊解法1

使用一个辅助对象计数,遍历数组,如果有一个元素的次数超过了 ⌊ n/2 ⌋,即为结果。

/*** @param {number[]} nums* @return {number}*/
var majorityElement = function(nums) {let count={};let flag=Math.floor(nums.length/2);for(let i=0;i<nums.length;i++){if(count[nums[i]]===undefined){count[nums[i]]=0;}count[nums[i]]++;if(count[nums[i]]>flag){return nums[i];}}
};

时间复杂度: O ( n ) O(n) O(n)

空间复杂度: O ( n ) O(n) O(n)

🖊解法2

由于多数元素的个数大于其他所有元素总和,所以我们可以从头维护一个候选元素,同时给其计数,遇到同类元素+1,遇到异类元素-1,减为0时,再维护当前元素,再重复之前步骤。

/*** @param {number[]} nums* @return {number}*/
var majorityElement = function(nums) {let candidate=nums[0];let count=1;for(let i=1;i<nums.length;i++){if(count===0){candidate=nums[i];count=1;}else if(candidate===nums[i]){count++;}else{count--;}}return candidate;
};

时间复杂度: O ( n ) O(n) O(n)

空间复杂度: O ( 1 ) O(1) O(1)

http://www.lryc.cn/news/149676.html

相关文章:

  • c#垃圾回收(Garbage Collection)
  • vue 基于element-plus el-button封装按钮组件
  • smbus只能再python2.7下运行?不能再python3.8下运行吗?
  • python中is和==的区别
  • Viobot回环使用
  • React钩子函数之forward结合useImperativeHandle钩子的基本使用
  • c++中移动语义和完美转发
  • 【linux命令讲解大全】040. 文件操作:使用touch命令创建和更新文件
  • Redis之MoreKey问题及Scan命令解读
  • QA工具开发流程
  • JSON.toJSONString首字母大小写问题
  • ant-vue1.78版a-auto-complete表单自动搜索返回列表中的关键字标红
  • Elasticsearch 优化
  • spring boot的自动装配原理
  • 走进低代码平台| iVX-困境之中如何突破传统
  • 【UIPickerView案例03-点餐系统之随机点餐 Objective-C语言】
  • 论文阅读_扩散模型_SDXL
  • 云原生Kubernetes:二进制部署K8S多Master架构(三)
  • 任意文件读取和下载
  • mysql怎么查指定表的自增id?
  • 【C++设计模式】单一职责原则
  • Windows docker desktop 基于HyperV的镜像文件迁移到D盘
  • LM-INFINITE: SIMPLE ON-THE-FLY LENGTH GENERALIZATION FOR LARGE LANGUAGE MODELS
  • ShardingSphere——压测实战
  • 二分图-染色法-dfs
  • SQL优化案例教程0基础(小白必看)
  • webpack(一)模块化
  • 基于Java+SpringBoot+Vue前后端分离人力资源管理系统设计和实现
  • 安装配置mariadb
  • Ant Design Vue 日期选择器DatePicker传给后台日期参数格式问题