LeetCode——[53]最大子数组和

128 阅读1分钟

53.最大子数组和

思路

例如给到数组[-2,1,-3,4,-1,2,1,-5,4]

要求最大子数组和,可以默认先取第一个数,同时设一个变量sum,来保存当前遍历到的累加值,累加值初始为 0,对于这个例子,首先取数组第一个元素-2,开始累加,第二个为 1,则累加产生的值为-1

let answer = nums[0];
let sum = 0;

for 循环,对nums 进行遍历:

for (let i = 0; i < nums.length; i++) {}

遍历时,对 sum 进行累加:

sum += nums[i];

累加后,进行判断,如果累加产生的值大于当前的answer值,那就把当前累加值赋给answer,如果累加产生的值为负数,那就重新将累加值sum变为 0,再继续迭代:

for (let i = 0; i < nums.length; i++) {
  sum += nums[i];
  // 如果累加产生的值大于当前的answer值,那就把当前累加值赋给answer
  answer = Math.max(answer, sum);
  // 如果当前加起来小于0了,那就归位到0,继续迭代
  if (sum < 0) {
    sum = 0;
  }
}

结果

function maxSubArray(nums: number[]): number {
  // 先直接取第一个数
  let answer = nums[0];
  let sum = 0;
  for (let i = 0; i < nums.length; i++) {
    sum += nums[i];
    // 如果累加产生的值大于当前的answer值,那就把当前累加值赋给answer
    answer = Math.max(answer, sum);
    // 如果当前加起来小于0了,那就归位到0,继续迭代
    if (sum < 0) {
      sum = 0;
    }
  }
  return answer;
}