leetcode第53题最大子数组和

111 阅读1分钟

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

子数组 是数组中的一个连续部分。 题目链接

我的JavaScript解法

/**
 * @param {number[]} nums
 * @return {number}
 */
 var maxSubArray = function(nums) {
  const len = nums.length;
  if (len == 0) return;
  let dp = new Array(len);
  dp[0] = nums[0];
  for (let i = 1; i < len; i++) {
    dp[i] = Math.max(dp[i-1] + nums[i], nums[i]);
  }
  let max = dp[0]
  for (let i = 1; i < len; i++) {
    max = Math.max(max, dp[i]);
  }
  return max;
}

解析 利用动态规划求解最优解

  • 时间复杂度: O(n)O(n)
  • 空间复杂度: O(n)O(n)

别人的技巧解法

var maxSubArray = function(nums) {
  let sum = 0;  // sum 用于记录当前的最大子数组和
  let res = nums[0];  // res 保存结果,起始值为第一个元素

  for (let i = 0; i < nums.length; i++) {
    if (sum > 0) {  // 如果和大于 0,则保留 sum 并加上当前遍历元素
      sum += nums[i];
    } else {  // 如果和小于等于 0,则丢弃之前的元素,将 sum 更新为当前元素
      sum = nums[i];
    }
    res = Math.max(sum, res);  // 更新 res 为较大值
  }

  return res;
};