题意:
给定一串数字,让你选择其中一些数字,选的数字不能相邻,那么选的数字的最大和是多少?
我的解法:
这又是一个典型的动态规划求最优的问题,但是一开始我还是没有想明白。简单的说就是这一个公式:
max_sum(i) = max(max_sum(i-2) + nums[i], max_sum(i-1))
java代码如下:
// 明显是动态规划的问题
public class Solution {
public 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 maxi_2 = nums[0];
int maxi_1 = Math.max(nums[0],nums[1]);
for(int i=2; i<nums.length; i++){
if(maxi_2 + nums[i] > maxi_1) {
int temp = maxi_2;
maxi_2 = maxi_1;
maxi_1 = temp + nums[i];
} else {
maxi_2 = maxi_1;
maxi_1 = maxi_1;
}
}
return maxi_1;
}
}