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

การหา Degree ของ Subarray ใน Array ด้วย JavaScript

Degree ของอาร์เรย์ของค่าคงที่ (literals) ถูกนิยามว่าเป็นความถี่สูงสุดขององค์ประกอบใดองค์ประกอบหนึ่งในอาร์เรย์นั้นๆ

const arr = [1, 2, 3, 3, 5, 6, 4, 3, 8, 3];

Degree ของอาร์เรย์นี้คือ 4 เนื่องจากตัวเลข 3 ปรากฏซ้ำ 4 ครั้งในอาร์เรย์นี้

เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของค่าคงที่เข้ามา ภารกิจของฟังก์ชันคือการหาความยาวของ subarray ที่ต่อเนื่องกัน (contiguous subarray) ที่เล็กที่ซึ่งมี degree เท่ากับ degree ของอาร์เรย์ทั้งหมด

ตัวอย่าง

const arr = [1, 2, 3, 3, 5, 6, 4, 3, 8, 3];
const findShortestSubArray = (arr = []) => {
  let range = new Map(), maxDegree = 0, minLength = Infinity;
  for(let i = 0; i < arr.length; i++){
    if(range.has(arr[i])) {
      let start = range.get(arr[i])[0];
      let degree = range.get(arr[i])[2];
      degree++;
      range.set(arr[i], [start, i, degree]);
      if(degree > maxDegree) maxDegree = degree;
    } else {
      let degree = 1;
      range.set(arr[i], [i, i, degree]);
      if(degree > maxDegree) maxDegree = degree;
    }
  }
  for (let key of range.keys()){
    let val = range.get(key);
    if(val[2] === maxDegree){
      let diff = (val[1] - val[0]) + 1;
      if(diff < minLength) minLength = diff;
    }
  }
  return minLength;
};
console.log(findShortestSubArray(arr));

ผลลัพธ์

ผลลัพธ์ที่แสดงในคอนโซลจะเป็นดังนี้:

8