198. 打家劫舍
题目
链接
代码
class Solution {
public int rob(int[] nums) {
if(nums.length==1){
return nums[0];
}
if(nums.length==2){
return Math.max(nums[0],nums[1]);
}
int[] dp = new int[nums.length];
dp[0] = nums[0];
dp[1] = Math.max(nums[0],nums[1]);
for(int i=2;i<nums.length;i++){
dp[i]= Math.max(dp[i-1],dp[i-2]+nums[i]);
}
return dp[nums.length-1];
}
}
213. 打家劫舍 II
题目
链接
代码
class Solution {
public int rob(int[] nums) {
if(nums.length==1){
return nums[0];
}
if(nums.length==2){
return Math.max(nums[0],nums[1]);
}
int[] dpLeft = new int[nums.length];
int[] dpRight = new int[nums.length];
dpLeft[0] = nums[0];
dpLeft[1] = Math.max(nums[0],nums[1]);
dpRight[1] = nums[1];
if(nums.length>=3){
dpRight[2] = Math.max(nums[1],nums[2]);
}
for(int i =2;i<nums.length-1;i++){
dpLeft[i] = Math.max(dpLeft[i-1],dpLeft[i-2]+nums[i]);
}
for(int i =3;i<nums.length;i++){
dpRight[i] = Math.max(dpRight[i-1],dpRight[i-2]+nums[i]);
}
return Math.max(dpLeft[nums.length-2],dpRight[nums.length-1]);
}
}
337. 打家劫舍 III
题目
链接
代码
class Solution {
Map<TreeNode,Integer> map = new HashMap();
public int rob(TreeNode root) {
if(root==null){
return 0;
}
if(map.containsKey(root)){
return map.get(root);
}
int money = root.val;
if(root.left!=null){
money+=rob(root.left.left)+rob(root.left.right);
}
if(root.right!=null){
money+=rob(root.right.left)+rob(root.right.right);
}
int res = Math.max(money,rob(root.left)+rob(root.right));
map.put(root,res);
return res;
}
}
121. 买卖股票的最佳时机
题目
链接
代码
class Solution {
public int maxProfit(int[] prices) {
int[][] dp = new int[prices.length][2];
dp[0][0] = 0;
dp[0][1] = -prices[0];
for(int i = 1;i<prices.length;i++){
dp[i][0] = Math.max(dp[i-1][0],dp[i-1][1]+prices[i]);
dp[i][1] = Math.max(dp[i-1][1],-prices[i]);
}
return dp[prices.length-1][0];
}
}