题目描述
分析
看到区间问题,先想下前缀和
求前缀和
算法
前缀和
过程
接下来对前缀和数组进行操作
对于前缀和的每一项,怎么能找到和题目所言:最大字数组和呢?
然而很简单~
对于前缀和的每一项而言,他和前面最小的一个元素的差值可以得到最大的区间,这个值就是一个备选结果,最后通过在计算过程中不断更新结果即可求得最大字数组和
代码
/**
* @param {number[]} nums
* @return {number}
*/
var maxSubArray = function (nums) {
const sum = [0]
for (let i = 1; i <= nums.length; i++) {
sum[i] = sum[i - 1] + nums[i - 1]
}
let ans = Number.MIN_SAFE_INTEGER,
pre = 0
for (let i = 1; i < sum.length; i++) {
const cur = sum[i] - pre
ans = Math.max(ans, cur)
pre = pre < sum[i] ? pre : sum[i]
}
return ans
}