日拱算法:多数元素
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第27天,点击查看活动详情
xixixi,更文无力,转攻算法简单题。中难题畏畏缩缩,简单题我重拳出击~~
突一突 LeetBook 列表/算法面试题汇总
冲冲冲~~
题目:### 多数元素
给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入: nums = [3,2,3]
输出: 3
示例 2:
输入: nums = [2,2,1,1,1,2,2]
输出: 2
提示:
n == nums.length
1 <= n <= 5 * 104
-109 <= nums[i] <= 109
解:
方法一:map 实现
通过一遍map,将所有出现元素和他们出现的次数进行存储,因为map的唯一性,然后对其进行一次遍历,找出最大值,第一次map操作时间复杂度为o(1),第二次而o(n),所以总体加起来为O(n); 但是由于开辟了一个map空间,空间复杂度同样是o(n)
```js /* * @param {number[]} nums * @return {number} / var majorityElement = function(nums) { let map = new Map() for(let i=0;i<nums.length;i++){ if(map.has(nums[i])){ map.set(nums[i],map.get(nums[i])+1) }else{ map.set(nums[i],1) } }
for(let [key,val] of map.entries()){
if(val>nums.length/2){
return key
}
}
}; ```
方法二:排序
思路:排序数组,如果有一个数字出现的频率大于n/2
,则在数组nums.length / 2
的位置就是这个数
复杂度分析:时间复杂度:O(nlogn)
,快排的时间复杂度。空间复杂度:O(logn)
,排序需要logn
的空间复杂度
js
var majorityElement = function (nums) {
nums.sort((a, b) => a - b);
return nums[Math.floor(nums.length / 2)];
};
OK,以上便是本篇分享。点赞关注评论,为好文助力👍
我是掘金安东尼 🤠 100 万阅读量人气前端技术博主 💥 INFP 写作人格坚持 1000 日更文 ✍ 关注我,陪你一起度过漫长编程岁月 🌏
- ChatGPT 不过如此,Kosmos-1 更胜一筹?微软这波又赢了
- “ChatGPT 们” 所需算力真是“贵滴夸张”!
- 国内有哪些对标 ChatGPT 的大语言模型? 5 大竞品
- 常用!提前 reject promise 的 2 种场景,收藏等于学会
- 编程开发新朋友 —— ChatGPT 和 NotionAI 实战
- 为什么我更推荐 Notion AI 胜于 ChatGPT ?
- 推荐 5 个你大概率没见过的免费 API ,一键获取数据!
- ✨从纯函数讲起,一窥最深刻的函子 Monad
- 神马?要退役 JavaScript ?!谁人出此狂言?!
- 写出干净的 JavaScript 5 个小技巧
- 想要白嫖正则是吧?这一次给你个够!
- 浅聊缓存函数
- JavaScript 中如何取消请求
- 知其然,而知其所以然,JS 对象创建与继承【汇总梳理】
- 10 个 Reduce 常用“奇技淫巧”
- 万字年中总结,共勉
- 4 个 JavaScript 最基础的问题 —— Eric Elliott
- 日拱算法:搜索二维矩阵 II
- 日拱算法:多数元素
- 日拱算法:只出现一次的数字