public static int climbStairs(int n) {
if (n==1){
return 1;
}
if (n==2){
return 2;
}
int[] dp=new int[n+1];
dp[1]=1;
dp[2]=2;
for (int i= 3;i<=n;i++){
dp[i]=dp[i-1]+dp[i-2];
}
return dp[n];
}
public static int maxSubArray(int[] nums) {
int length=nums.length;
int[] dp=new int[length];
dp[0]=nums[0];
int max=dp[0];
for(int i=1;i<length;i++){
dp[i]=Math.max(dp[i-1],0)+nums[i];
max=Math.max(max,dp[i]);
}
return max;
}
public static int rob(int[] nums) {
//边界条件判断
if (nums == null || nums.length == 0) {
return 0;
}
int length = nums.length;
int[][] dp = new int[length][2];
dp[0][0] = 0;//第1家没偷
dp[0][1] = nums[0];//第1家偷了
//从第2个开始判断
for (int i = 1; i < length; i++) {
//下面两行是递推公式
dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1]);
dp[i][1] = dp[i - 1][0] + nums[i];
}
//最后取最大值即可
return Math.max(dp[length - 1][0], dp[length - 1][1]);
}
算法学习动态规划
最新推荐文章于 2024-11-10 17:03:53 发布