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

นับซับอาร์เรย์ที่มีสมาชิกต่างกัน n ค่าใน JavaScript


ปัญหา

เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของค่าตรงตัว arr เป็นอาร์กิวเมนต์แรก อาร์กิวเมนต์ที่สองคือตัวเลข num ฟังก์ชันควรนับและคืนจำนวนซับอาร์เรย์ของอาร์เรย์ที่มีสมาชิกต่างกันอยู่ดี num ค่า

ตัวอย่างเช่น หากอินพุตคือ

const arr = [12, 15, 12, 15, 18]; 
const num = 2;

ผลลัพธ์ควรเป็น

const output = 7;

คำอธิบายผลลัพธ์

ซับอาร์เรย์ที่เกิดจากสมาชิกต่างกัน 2 ค่า:

[12,15], [15,12], [12,15], [15,18], [12,15,12], [15,12,15], [12,15,12,15]

ตัวอย่างโค้ด

const arr = [12, 15, 12, 15, 18]; 
const num = 2; 
const distinctSubarrays = (arr = [], num = 1) => {
  const findDistinct = (count) => {
    const map = {};
    let ptr = 0;
    let distinct = 0;
    let res = 0;
    for(let right = 0; right < arr.length; right++){
      const num = arr[right];
      map[num] = (map[num] || 0) + 1;
      if(map[num] === 1){
        distinct += 1;
      }
      while(distinct > count){
        map[arr[ptr]] -= 1;
        if(map[arr[ptr]] === 0){
          distinct -= 1;
        }
        ptr += 1;
      }
      res += right - ptr + 1;
    }
    return res;
  };
  return findDistinct(num) - findDistinct(num - 1);
};
console.log(distinctSubarrays(arr, num));

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็น

7