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