import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @return int整型 */ public int rob (int[] nums) { // write code here // 动态规划 - dp[i]表示偷到第i家(偷or不偷)的最大收益 int n = nums.length; if (n == 1) { return nums[0]; } int[] dp = new int[n]; for (int i = 0; i < n; i++) { // 选择偷i号的收益 int yes = nums[i]; if (i - 2 >= 0) { // i位置本身的金额,加上i-2处的最大收益 yes += dp[i - 2]; } // 选择不偷i号的收益 int no = 0; if (i - 1 >= 0) { // i-1位置本身的最大收益 no += dp[i - 1]; } // i位置的最大收益为偷or不偷两种情况收益的最大值 dp[i] = Math.max(yes, no); } return dp[n - 1]; } }