leetcode

我的 leetcode 题解(JavaScript)


/**
 * @param {number[]} A
 * @param {number} L
 * @param {number} M
 * @return {number}
 */
// Lsum, sum of the last L elements
// Msum, sum of the last M elements

// Lmax, max sum of contiguous L elements before the last M elements.
// Mmax, max sum of contiguous M elements before the last L elements.
const maxSumTwoNoOverlap = function (A, L, M) {
  // A 中现在储存的值为原先 A 的 前 i 项和
  for (let i = 1; i < A.length; i++) {
    A[i] += A[i - 1];
  }
  let res = A[L + M - 1], Lmax = A[L - 1], Mmax = A[M - 1];
  for (let i = L + M; i < A.length; i++) {
    Lmax = Math.max(Lmax, A[i - M] - A[i - L - M]);
    Mmax = Math.max(Mmax, A[i - L] - A[i - L - M]);
    res = Math.max(res, Math.max(Lmax + A[i] - A[i - M], Mmax + A[i] - A[i - L]));
  }
  return res;
};