打家劫舍
class Solution {
public int rob(int[] nums) {
int n=nums.length;
if(n==0) return n;
int []dp=new int[n+1];
dp[0]=0;
dp[1]=nums[0];
for(int i=2;i<=n;i++){
dp[i]=Math.max(dp[i-1],dp[i-2]+nums[i-1]);
}
return dp[n];
}
}
连续子数组的最大和
class Solution {
public int maxSubArray(int[] nums) {
int n=nums.length;
int []dp=new int[n];
dp[0]=nums[0];
int ans=dp[0];
for (int i = 1; i <n ; i++) {
dp[i]=Math.max(nums[i],dp[i-1]+nums[i]);
ans=Math.max(ans,dp[i]);
}
return ans;
}
}
本文详细解析了两个经典的动态规划问题:'打家劫舍'中的连续子数组最大和,以及求解数组中最大连续子数组和。通过实例代码展示了如何运用动态规划思想解决这两个问题,是理解动态规划应用的好例子。
1622

被折叠的 条评论
为什么被折叠?



