Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonight without alerting the police.
Credits:
Special thanks to @ifanchu for adding this problem and creating all test cases. Also thanks to @ts for adding additional test cases.
---
Solution: The dynamic programming formula is:
i = 0 -> nums[0] i = 1 -> max(nums[0], nums[1]) i >= 2 -> f[i] = max(f[i - 1], f[i - 2] + nums[i])The final answer will be stored in f[nums.length - 1].
public class Solution {
public int rob(int[] nums) {
if (nums.length == 0) return 0;
if (nums.length == 1) return nums[0];
int[] f = new int[nums.length];
f[0] = nums[0];
f[1] = Math.max(nums[0], nums[1]);
for (int i = 2; i < nums.length; i++) {
f[i] = Math.max(f[i - 1], f[i - 2] + f[i]);
}
return f[nums.length - 1];
}
}
No comments:
Post a Comment