LeetCode 数据结构基础 - 多数元素

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

多数元素

原题地址

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

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

输入:[3,2,3]
输出:3
复制代码

示例 2:

输入:[2,2,1,1,1,2,2]
输出:2
复制代码

思路分析

方法一

  1. 定义一个对象 hashkey 为数组中的元素,value 用来存储数组中每个元素出现的次数;
  2. 使用 Object.keys 来遍历 hash,寻找 value 值大于 n/2 的值,而后返回对应的 key,即为数组中的多数元素。

方法二

  1. 多数元素为数组中出现次数大于 n/2 的元素,那么在排序后,它一定存在在数组的中间。比如示例一排序后为 [2,3,3],示例二排序后为 [1,1,1,2,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

おすすめ

転載: juejin.im/post/7076444789276672014