Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

ความยาวน้อยที่สุดที่มีความถี่มากที่สุดใน JavaScript


ปัญหา

เราต้องเขียนฟังก์ชัน 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