前端算法- 多数元素

123 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第18天,点击查看活动详情

题目

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

输入: nums = [3,2,3]
输出: 3

思路一

由于多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素,所以就注定这个数字只会有一个,所以我们先使用sort方法将数组排序好,然后使用Math.foolr获取到数组的中间位置并且赋值给n变量,最后将nums数组中间位置的值返回出去即可

/**
 * @param {number[]} nums
 * @return {number}
 */
var majorityElement = function(nums) {
    nums.sort(function(a,b){return a-b})
    let n=Math.floor(nums.length/2)
    return nums[n]
};

思路二

我们先定义一个temp对象他是用于记录统计次数的,在定义一个MaxKey变量,他是用于记录最大统计值,在定义一个MarKeyIndex变量,他是指向最大值对应的数,然后我们使用循环对nuls数组进行遍历,在循环中进行判断如果当前值是不存在于temp对象中则作为属性值添加进去并且值为1,如果当前值存在于temp对象中则将对应的属性值进行自增1,我们一开始统计最大值默认为0,然后每一次循环我们都会对比对象里面记录的次数有没有大于最大值,如果有就将其存放到MaxKey变量中,同时也更新MarKeyIndex变量值,记录下最大值对应的属性值,以此往复,最后将MarKeyIndex变量返回出去即可

/**
 * @param {number[]} nums
 * @return {number}
 */
var majorityElement = function(nums) {
    const temp = {};
    var MaxKey = 0;
    var MarKeyIndex;
    for (let i = 0; i < nums.length; i++) {
        if (temp[nums[i]]) {
            temp[nums[i]] ++  
        } else {
            temp[nums[i]] = 1
        }
        if (temp[nums[i]] > MaxKey) {
            MaxKey = temp[nums[i]]
            MarKeyIndex = nums[i]
        }
    }
    return MarKeyIndex
};