package DP;
import java.util.Arrays;
public class _213_HouseRober2 {
/**
* 动态规划,和第198道一样。
* @param nums
* @return
*/
private static int myRob(int[] nums){
int n = nums.length;
if (n == 0){
return 0;
}
int[] dp = new int[n];
dp[0] = nums[0];
dp[1] = Math.max(nums[0], nums[1]);
for (int i = 2; i < n; i++){
dp[i] = Math.max(dp[i-2] + nums[i], dp[i-1]);
}
return dp[n-1];
}
/**
* 首和尾只能选一个。
* 所以数组分为两部分:nums[1:length]和nums[0:length-1]
* 然后取最大值即可。
* @param nums
* @return
*/
public static int rob(int[] nums){
if (nums.length == 0){
return 0;
}
if (nums.length == 1){
return nums[0];
}
if (nums.length == 2){
return Math.max(nums[0], nums[1]);
}
int[] nums1 = Arrays.copyOfRange(nums, 1, nums.length);
int[] nums2 = Arrays.copyOfRange(nums, 0, nums.length-1);
return Math.max(myRob(nums1), myRob(nums2));
}
}
Leetcode_213_HouseRober2_打家劫舍
最新推荐文章于 2022-02-15 16:34:20 发布