leetcode 343.整数拆分 198.打家劫舍(动态规划)

   OJ链接 :leetcode 343.整数拆分

leetcode 343.整数拆分 198.打家劫舍(动态规划)_第1张图片

代码: 

 class Solution {
    public int integerBreak(int n) {
        int[] dp = new int[n+1];
         //每个n,拆分多个整数乘积的最大值
        dp [0] = 0;
        dp [1] = 1;  
        for(int i =2 ; i<=n; i++){
            for(int j = 0 ; j < i; j++){
                dp[i] = Math.max(dp[i],Math.max( j*(i-j),j*dp[i-j]));
                //后边MAX ,两种情况 1.j*(i-j),当前j乘以剩下的i-j整数,只有两个数;
                                  //2.j*dp[i-j] , 当前j乘以 多个拆分整数的最大值
                //前边MAX,当前j位置 ,dp[i]的最大值,多个j比较。
            }
        }
        return dp[n];
    }
}

OJ链接 :198.打家劫舍

 leetcode 343.整数拆分 198.打家劫舍(动态规划)_第2张图片

 代码:

class Solution {
    public int rob(int[] nums) {
        int n =nums.length;
        int[] dp = new int[n+1];
       
        dp[1] = nums[0];
        for(int i=2; i<=n ;i++){ 
            dp[i] = Math.max (dp[i-1] , nums[i-1]+dp[i-2]);//两种情况
            //前 n-1 大 (还是) 该位置加前n-2的钱数大;
        }
        return dp[n];
    }
}

你可能感兴趣的:(leetcode,动态规划,算法)