思路
dp[i-2] +nums[i]
dp[i-1]
class Solution { public int rob(int[] nums) { if(nums==null && nums.length==0) return 0; if(nums.length == 1 ) return nums[0]; // 1. 定义递推公式 int[] dp = new int[nums.length]; // 2. 递推数组 // dp = Math.max(dp[i-2]+nums[i],dp[i-1]); // 3. 初始化 dp[0] = nums[0]; dp[1] = Math.max(nums[0],nums[1]); // 4. 遍历顺序 for(int i = 2 ; i < nums.length ; i++){ dp[i] = Math.max(dp[i-2]+nums[i],dp[i-1]); } return dp[nums.length-1]; } }
public class hitHome { public static int rob(int[] nums){ // 1.定义 dp数组 int[] dp = new int[nums.length]; // 2. 递推公式 // dp = Math.max(dp[i-2]+nums[i],dp[i-1]); // 3.初始化 dp[0] = nums[0]; dp[1] = Math.max(nums[0],nums[1]); // 4. 遍历顺序 for (int i = 2 ; i < nums.length;i++){ dp[i] = Math.max(dp[i-2]+nums[i],dp[i-1]); } return dp[nums.length-1]; } public static void main(String[] args) { System.out.println("输入数组长度"); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] nums = new int[n]; for(int i = 0 ; i < n ; i ++){ nums[i] = sc.nextInt(); } System.out.println("结果是"+rob(nums)); } }