리터럴 배열의 정도는 요소 중 하나의 최대 빈도로 정의됩니다.
const arr = [1, 2, 3, 3, 5, 6, 4, 3, 8, 3];
이 배열에서 3이 4번 반복되기 때문에 이 배열의 차수는 4입니다.
리터럴 배열을 받는 JavaScript 함수를 작성해야 합니다. 우리 함수의 임무는 차수가 전체 배열과 동일한 배열에서 가장 작은 연속 하위 배열의 길이를 찾는 것입니다.
예시
const arr = [1, 2, 3, 3, 5, 6, 4, 3, 8, 3];
const findShortestSubArray = (arr = []) => {
let range = new Map(), maxDegree = 0, minLength = Infinity;
for(let i = 0; i < arr.length; i++){ if(range.has(arr[i])) {
let start = range.get(arr[i])[0];
let degree = range.get(arr[i])[2]; degree++;
range.set(arr[i], [start, i, degree]);
if(degree > maxDegree)
maxDegree = degree;
}
else {
let degree = 1;
range.set(arr[i],[i, i, degree]); if(degree > maxDegree)
maxDegree = degree;
}
}
for (let key of range.keys()){
let val = range.get(key)
if(val[2] === maxDegree){
let diff = (val[1] - val[0]) + 1;
if(diff < minLength) minLength = diff;
}
}
return minLength;
};
console.log(findShortestSubArray(arr)); 출력
콘솔의 출력은 -
8