一、题目描述
二、示例
三、解题思路
我想到的是利用map来保存每个数字出现的次数 ,并且用一个变量来保存最大值,通过遍历来不断更新最大值,其实仅仅保存最大值是不够的 还需要连续数组的最小值,所以也要保存改数字的出现的第一个位置,最后一个位置,来进行连续数组的最小数组的变量的更新。
最后因为是输出min的值,我们用最后一次减去第一次的下标值+1就是最后的答案!
四、代码
/**
* @param {number[]} nums
* @return {number}
*/
var findShortestSubArray = function(nums) {
let time = 0
let map = {}
let min = 0
for(let i = 0 ; i < nums.length ;i++){
if(!map[nums[i]]){
map[nums[i]] = [1,i,i]
}
else{
map[nums[i]][0]++
map[nums[i]][2] = i
if(map[nums[i]][0]>time){
time = map[nums[i]][0]
min = map[nums[i]][2]-map[nums[i]][1]
}
else if(map[nums[i]][0]===time){
min= Math.min(map[nums[i]][2]-map[nums[i]][1],min)
}
}
}
return min+1
};