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

ซับอาร์เรย์ยาวที่สุดที่ความต่างสัมบูรณ์เท่ากับตัวเลขกำหนดใน JavaScript

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

ตัวอย่าง

ถ้าอาร์เรย์และตัวเลขนำเข้าคือ:

const arr = [7, 9, 8, 6, 6, 3];
const num = 1;

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

const output = 3,

เพราะซับอาร์เรย์ที่ต้องการคือ [7, 6, 6]

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

const arr = [7, 9, 8, 6, 6, 3];
const maximumSubarray = (arr = [], num = 1) => {
  if(!arr.length) {
    return 0;
  }
  const maximum = arr.reduce((acc, val) => Math.max(acc, val));
  const buckets = new Array(maximum + 1);
  buckets.fill(0);
  const { length } = arr;
  for(let i = 0; i < length; i++) {
    buckets[arr[i]] += num;
  }
  let max = 0;
  for(let j = 1; j < maximum + 1; j++) {
    let curr = buckets[j];
    let prev = buckets[j - 1];
    if(prev != 0 && prev + curr > max) {
      max = prev + curr;
    }
  }
  return max;
};
console.log(maximumSubarray(arr));

ผลลัพธ์

3