문제
첫 번째이자 유일한 인수로 숫자 배열, arr를 취하는 JavaScript 함수를 작성해야 합니다.
우리의 함수는 배열 arr의 (인접한) 하위 배열의 가능한 가장 작은 길이를 찾는 것으로 가정되며, 이 배열은 전체 배열과 모든 요소의 최대 빈도가 동일합니다.
예를 들어 함수에 대한 입력이
인 경우입력
const arr = [55, 77, 77, 88, 55];
출력
const output = 2;
출력 설명
55번과 77번 요소가 모두 두 번 나타나기 때문에 입력 배열은 2의 모든 요소에 대해 가장 큰 빈도를 갖습니다.
전체 배열 중 빈도가 가장 큰 하위 배열 중 가장 짧은 길이는 2이므로 2를 반환합니다.
예시
다음은 코드입니다 -
const arr = [55, 77, 77, 88, 55];
const shortestLength = (arr) => {
let freq = 0
let len = Infinity
arr.reduce((acc, num, index) => {
if (acc[num] !== undefined) {
acc[num].freq += 1
acc[num].range[1] = index
} else {
acc[num] = {
freq: 0,
range: [index, index],
}
}
if (acc[num].freq > freq) {
freq = acc[num].freq
len = acc[num].range[1] - acc[num].range[0] + 1
} else if (acc[num].freq === freq) {
len = Math.min(
len,
acc[num].range[1] - acc[num].range[0] + 1,
)
}
return acc
}, {})
return len
};
console.log(shortestLength(arr)); 출력
2