You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
functionlongestSum(nums){constdp=[nums[0]];letmax=-Infinity;for(leti=1;i<nums.length;i++){if(dp[i-1]>0){dp[i]=dp[i-1]+nums[i];max=max>dp[i] ? max : dp[i];}else{dp[i]=nums[i];max=max>dp[i] ? max : dp[i];}}returnmax;}
Activity
sisterAn commentedon Aug 13, 2020
解法:动态规划
动态规划(Dynamic Programming,DP)是一种将复杂问题分解成小问题求解的策略,但与分治算法不同的是,分治算法要求各子问题是相互独立的,而动态规划各子问题是相互关联的。
我们使用动态规划求解问题时,需要遵循以下几个重要步骤:
第一步:定义子问题
动态规划是将整个数组归纳考虑,假设我们已经知道了以第
i-1个数结尾的连续子数组的最大和dp[i-1],显然以第i个数结尾的连续子数组的最大和的可能取值要么为dp[i-1]+nums[i],要么就是nums[i]单独成一组,也就是nums[i],在这两个数中我们取最大值第二步:实现需要反复执行解决的子子问题部分
第三步:识别并求解出边界条件
最后一步:把尾码翻译成代码,处理一些边界情况
因为我们在计算
dp[i]的时候,只关心dp[i-1]与nums[i],因此不用把整个dp数组保存下来,只需设置一个pre保存dp[i-1]就好了。代码实现(优化):
复杂度分析:
leetcode
RainMaker-Q commentedon Aug 14, 2020
dp
dp[i]表示以nums[i]结尾的,最大的连续值。
tongzk94 commentedon Aug 14, 2020