Chúng ta cần viết một hàm JavaScript nhận vào mảng số arr làm đối số thứ nhất và số num làm đối số thứ hai (luôn ≤ độ dài mảng). Hàm nên tìm và trả về tổng lớn nhất của num phần tử liên tiếp trong mảng.
Ví dụ - Nếu đầu vào: arr = [2,5,3,4,6], num = 2. Đầu ra: 10 (vì 6+4=10 lớn nhất).
Có thể giải bằng kỹ thuật cửa sổ trượt (sliding window) với thời gian tuyến tính và không gian hằng số.
Ví dụ
Code sau đây:
const arr = [2, 5, 3, 4, 6];
const findSum = arr => arr.reduce((acc, val) => acc + val);
const maximumSum = (arr = [], num = 1) => {
let left = 0, right = left + num;
let sum = findSum(arr.slice(left, right));
for (; right <= arr.length; right++, left++) {
sum = Math.max(findSum(arr.slice(left, right)), sum);
}
return sum;
};
console.log(maximumSum(arr, 2));
console.log(maximumSum(arr, 3));Kết quả
Kết quả trên console:
10 12