js - n个连续最大整数之和

76 阅读1分钟

js - n个最大数组之和

egg

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组 是数组中的一个连续部分。

示例 1:

输入: nums = [-2,1,-3,4,-1,2,1,-5,4] , n = 4
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6

示例 2:

输入: nums = [1]
输出: 1

示例 3:

输入: nums = [5,4,-1,7,8] n = 3
输出: 23

滑动窗口解决

先假定窗口的和,然后用当前窗口的值 - 第一个元素 + 再向后移动一位。最后取最大值,依次

例如:

let arr = [3, 2, -4, 6, 1]

n = 3

  1. maxSum = 3+2+(-4) = -1

  2. maxSum - arr[1] + arr[3]

  3. maxSum - arr[2] + arr[4]

const slidingWindow = (arr, windowSize) => {
  let maxSum = 0;
  let tempSum = 0;
  for (let i = 0; i < windowSize.length; i++) {
    maxSum += arr[i];
  }

  tempSum = maxSum;
  for (let i = windowSize; i < arr.length; i++) {
    tempSum = tempSum - arr[i - windowSize] + arr[i]; // 以windowSize 为基准。用和减去每一次第一个数的数,再加上移动的一位
    maxSum = Math.max(maxSum, tempSum);
  }
  return maxSum;
};
console.log('Sliding window', slidingWindow([3, 2, -4, 6, 1], 3)); // 3