文章目录 1. 题目2. 思路(1) 动态规划 3. 代码 1. 题目 2. 思路 (1) 动态规划 由于第一家和最后一家只能选择一家偷,另一家必然不能偷,因此,可以直接删除第一家或者最后一家,这样就断开了环,分别进行动态规划,取两次中的金额较大的一个即可。 3. 代码 public class Test { public static void main(String[] args) { } } class Solution { public int rob(int[] nums) { int n = nums.length; if (n == 1) { return nums[0]; } if (n == 2) { return Math.max(nums[0], nums[1]); } int[] dp = new int[n]; dp[0] = nums[0]; dp[1] = Math.max(nums[0], nums[1]); for (int i = 2; i < n - 1; i++) { dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1]); } int temp = dp[n - 2]; dp[1] = nums[1]; dp[2] = Math.max(nums[1], nums[2]); for (int i = 3; i < n; i++) { dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1]); } return Math.max(temp, dp[n - 1]); } }