题解 | #打家劫舍(二)#
打家劫舍(二)
https://www.nowcoder.com/practice/6a8b2ceb3f8f4e5891939d7d7cbbd2c4
import java.util.Scanner; import java.util.List; import java.util.ArrayList; import java.lang.Math; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { List<Integer> nums = new ArrayList<>(); Scanner in = new Scanner(System.in); int n = in.nextInt(); while (in.hasNextInt()) { nums.add(in.nextInt()); } if (nums.size() == 1) { System.out.print(nums.get(0)); }else{ int size = nums.size(); System.out.print(Math.max(grab(nums, 0, size-2), grab(nums, 1, size - 1))); } } public static int grab(List<Integer> nums, int l, int r) { int pre2 = 0, pre1 = 0; for (int i = 0; i < r - l + 1; i++) { int cur = Math.max(pre2 + nums.get(i + l), pre1); pre2 = pre1; pre1 = cur; } return pre1; } }
打家劫舍二将第一个房子和最后一个房子连起来了,那就在打劫第一各房子和不打劫第一个房子打劫最后一个房子中选一个收益最大的