【LeetCode】697. 数组的度(js 实现)

1、题目

697. 数组的度 - 力扣(LeetCode) (leetcode-cn.com)

数组的度:数组里任一元素出现频数的最大值。

2、实现

(1)思路

 (2)代码

/**
 * @param {number[]} nums
 * @return {number}
 */
var findShortestSubArray = function(nums) {
    // 定义一个对象,用于存储各个数字出现的次数、第一次出现的位置下标、最后一次出现的位置下标
    let obj = {};
    // 第一次遍历数组,计算三种值
    for(let i=0; i<nums.length; i++) {
        if(!obj[nums[i]]) {
            obj[nums[i]] = [1, i, i];
        } else {
            obj[nums[i]][0] += 1;
            obj[nums[i]][2] = i;
        }
    }

    // 求数组的度
    let degree = 0;
    for(const [counter, left, right] of Object.values(obj)) {
        degree = Math.max(degree, counter);
    }

    // 求与数组度相同的最短子数组
    let shortArrLength = [];
    for(const [counter, left, right] of Object.values(obj)) {
        if(counter === degree) {
            shortArrLength.push(right - left +1);
        }
    }
    return Math.min(...shortArrLength);
};

3、参考:

js 遍历对象的几种方法 - 安莫寒 - 博客园 (cnblogs.com)

详细分析题意与思路,简洁代码,看完必懂 - 数组的度 - 力扣(LeetCode) (leetcode-cn.com)

JS - 数组的度 - 力扣(LeetCode) (leetcode-cn.com)


版权声明:本文为weixin_44109827原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。