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