Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
多数元素
给定一个大小为 n
的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋
的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入:[3,2,3]
输出:3
复制代码
示例 2:
输入:[2,2,1,1,1,2,2]
输出:2
复制代码
思路分析
方法一
- 定义一个对象
hash
,key
为数组中的元素,value
用来存储数组中每个元素出现的次数; - 使用
Object.keys
来遍历hash
,寻找value
值大于n/2
的值,而后返回对应的key
,即为数组中的多数元素。
方法二
- 多数元素为数组中出现次数大于
n/2
的元素,那么在排序后,它一定存在在数组的中间。比如示例一排序后为[2,3,3]
,示例二排序后为[1,1,1,2,2,2,2]
; - 因此将数组排序,取
nums[Math.floor(nums.length / 2)]
即可。
AC 代码
方法一
/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function(nums) {
let hash = {}
for(let i = 0; i < nums.length; i++) {
if(hash[nums[i]]) {
hash[nums[i]] += 1
} else {
hash[nums[i]] = 1
}
}
const keys = Object.keys(hash)
for(let i = 0; i < keys.length; i++) {
if(hash[keys[i]] > nums.length / 2) {
return keys[i]
}
}
};
复制代码
结果:
- 执行结果: 通过
- 执行用时:60 ms, 在所有 JavaScript 提交中击败了93.46%的用户
- 内存消耗:43 MB, 在所有 JavaScript 提交中击败了24.92%的用户
- 通过测试用例:43 / 43
方法二
/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function(nums) {
nums.sort()
return nums[Math.floor(nums.length / 2)]
};
复制代码
结果:
- 执行结果: 通过
- 执行用时:64 ms, 在所有 JavaScript 提交中击败了85.17%的用户
- 内存消耗:43.6 MB, 在所有 JavaScript 提交中击败了10.46%的用户
- 通过测试用例:43 / 43
END
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END