题目: 给你一个整数数组 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;
}
解析 利用动态规划求解最优解
- 时间复杂度:
- 空间复杂度:
别人的技巧解法
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;
};