题目
代码
/**
* 使用map
* key:数组中的元素 num
* value:一个包含三个元素的数组 [count, left, right]
* count 代表 num 出现的次数
* left 代表 num 出现的最左位置
* right 代表 num 出现的最右位置
* 遍历 map,最终结果为取 count 最大的 right-left+1,
* 如果 count 有相同的,直接比较 right-left+1
*/
var findShortestSubArray = function(nums) {
const map = new Map()
let maxNum = 0
let minLen = 0
let arr = []
nums.forEach((item, index) => {
if (map.has(item)) {
const arr = map.get(item)
arr[0] = arr[0] + 1
arr[2] = index
} else {
map.set(item, [1, index, index])
}
})
for (const [, [count, left, right]] of map) {
if (count > maxNum) {
minLen = right-left+1
maxNum = count
} else if (count === maxNum && (minLen > right-left+1)) {
minLen = right-left+1
maxNum = count
}
}
return minLen
};