Chúng tôi được yêu cầu viết một hàm JavaScript lấy một mảng Numbers làm đối số đầu tiên và một số duy nhất làm đối số thứ hai. Hàm sẽ tìm và trả về số tổng số các mảng con liên tục có tổng bằng số được chỉ định bởi đối số thứ hai.
Đảm bảo rằng tất cả các số trong mảng là số dương.
Ví dụ -
Nếu đầu vào là -
const arr = [1, 1, 1]; const sum = 2;
Sau đó, kết quả đầu ra phải là 2 vì có chính xác hai mảng con trong mảng này tổng bằng 2.
Chúng tôi sẽ sử dụng thuật toán cửa sổ trượt sử dụng cách tiếp cận hai con trỏ để tìm các cửa sổ mong muốn (các mảng con với tổng số tiền bắt buộc) và đếm số lượng của chúng.
Ví dụ
const arr = [1, 2, 3, 4, 5]; const sum = 5; // two pointer approach to find one matching subarray const findOne = (arr, target, start = 0) => { let left = start, right = start, sum = 0; while(right < arr.length){ sum += arr[right]; if(sum === target){ return true; } else if(sum < target){ right++; }else{ left++; sum -= left; if(left > right){ right = left; }; }; }; return false; }; // iterating over the array to find all pair count const findAll = (arr = [], target) => { let count = 0; for(let i = 0; i < arr.length; i++){ count += findOne(arr, target, i); }; return count; }; console.log(findAll(arr, sum)); console.log(findAll([1, 1, 1], 2));
Đầu ra
Và đầu ra trong bảng điều khiển sẽ là -
2 2