ปัญหา
เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของตัวเลข arr เป็นอาร์กิวเมนต์เดียว
ฟังก์ชันควรหาความยาวน้อยที่สุดของซับอาร์เรย์ (ติดกัน) ที่มีความถี่มากที่สุดของสมาชิกใดสมาชิกหนึ่งเท่ากับอาร์เรย์ทั้งหมด
ตัวอย่างเช่น หากอินพุตคือ
Input
const arr = [55, 77, 77, 88, 55];
Output
const output = 2;
คำอธิบายผลลัพธ์
อาร์เรย์อินพุตมีความถี่มากที่สุดของสมาชิกคือ 2 เพราะ 55 และ 77 ปรากฏ 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