import java.util.*; /** * NC176 打家劫舍(一) * @author d3y1 */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @return int整型 */ public int rob (int[] nums) { return solution1(nums); // return solution2(nums); } /** * 动态规划 * * dp[i][0]表示第i家不偷时前i家的最多偷窃金额 * dp[i][1]表示第i家要偷时前i家的最多偷窃金额 * * dp[i][0] = Math.max(dp[i-1][0], dp[i-1][1]); * dp[i][1] = dp[i-1][0] + nums[i-1]; * * @param nums * @return */ private int solution1(int[] nums){ int n = nums.length; int[][] dp = new int[n+1][2]; for(int i=1; i<=n; i++){ dp[i][0] = Math.max(dp[i-1][0], dp[i-1][1]); dp[i][1] = dp[i-1][0] + nums[i-1]; } return Math.max(dp[n][0], dp[n][1]); } /** * 动态规划 * * dp[i]表示前i家的最多偷窃金额 * * dp[i] = Math.max(dp[i-1], dp[i-2]+nums[i-1]) * * @param nums * @return */ private int solution2(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], dp[i-2]+nums[i-1]); } return dp[n]; } }