思路: 首先这道题最简单暴力的方法就是直接遍历一遍,然后取出最大值,这种方法时间复杂度和空间复杂度都很高
/**
* @param {number[]} nums
* @return {number}
*/
var maxSubArray = function(nums) {
let max = []
for(let i=0;i<nums.length;i++){
let sum = nums[i]
let tempMax = nums[i]
for(let j=i+1;j<nums.length;j++){
if(sum+nums[j]>tempMax){
tempMax = sum+nums[j]
}
sum = sum +nums[j]
}
max.push(tempMax)
}
max.sort(function(a,b){return a-b})
console.log(max)
return max[max.length-1]
};
思路二:动态规划
状态转换方程就是 dp[i] = Math.max(num[i],dp[i-1]+num[i])
/**
* @param {number[]} nums
* @return {number}
*/
var maxSubArray = function(nums) {
let dp = new Array(nums.length).fill(Number.MIN_SAFE_INTEGER)
console.log(dp)
let res = nums[0]
dp[0] = nums[0]
for(let i=1;i<nums.length;i++){
dp[i] = Math.max(nums[i],dp[i-1]+nums[i])
res = Math.max(res,dp[i])
}
return res
};