- 题目:给定一个数组,求数组中元素的最大和,限制条件是相邻元素不能加和
- 难度:Easy
- 思路:遍历数组,遍历到第i个元素,前面所有满足限制条件的元素组合的最大和为result[i],result[i]依赖于第一个位置的元素值nums[i]/result[i-2]/result[i-1]
- 其实问题的本质是说第i个位置的元素加不加入求和序列
- 动态转移方程为:result[i] = Math.max(result[i-1],result[i-2]+nums[i])
- 代码:
public class Solution {
public int rob(int[] nums) {
if(nums == null || nums.length == 0){
return 0;
}
int len = nums.length;
if(len == 1){
return nums[0];
}
int[] result = new int[len];
result[0] = nums[0];
result[1] = Math.max(nums[0], nums[1]);
for(int i = 2; i < len; i++){
result[i] = Math.max(result[i-1],result[i-2]+nums[i]);
}
return result[len-1];
}
}