leetcode(24)-最大子序列和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
方法1:暴力解法
很显然会报 超过时间限制。
/** * @param {number[]} nums * @return {number} */ var maxSubArray = function(nums) { let begin = 0; let end = 1; let maxSum = Number.NEGATIVE_INFINITY; for(let i = 0; i<nums.length;i++){ for(let j =i+1;j<=nums.length;j++){ let temSum = 0; nums.slice(i,j).forEach(el=>{ temSum+=el; }) if(temSum>maxSum){ maxSum = temSum; begin = i; end = j; } } } return maxSum; };
方法2:官方题解-动态规划
var maxSubArray = function(nums) { let pre = 0, maxAns = nums[0]; nums.forEach((x) => { pre = Math.max(pre + x, x); maxAns = Math.max(maxAns, pre); }); return maxAns; };
//我的写法 /** * @param {number[]} nums * @return {number} */ var maxSubArray = function(nums) { let res = []; res.push(nums[0]); let maxSum = nums[0]; for(let i = 1; i<nums.length;i++){ res.push(Math.max(nums[i]+res[i-1],nums[i])); maxSum = Math.max(res[i],maxSum); } return maxSum; };