add
This commit is contained in:
parent
ea56f626b7
commit
5e6fdc40cc
20
5.leetcode/src/com/fanxb/common/Q198.java
Normal file
20
5.leetcode/src/com/fanxb/common/Q198.java
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package com.fanxb.common;
|
||||||
|
|
||||||
|
public class Q198 {
|
||||||
|
public int rob(int[] nums) {
|
||||||
|
//定义fn[k]表示有k个房子时的最大金额
|
||||||
|
int[] fn = new int[nums.length + 1];
|
||||||
|
//显然fn[0]=0,fn[1]=nums[0]
|
||||||
|
fn[1] = nums[0];
|
||||||
|
int res = fn[1];
|
||||||
|
for (int i = 2; i <= nums.length; i++) {
|
||||||
|
//当发现新房子时要获得最大收益有两种选择,偷这个新房子(不能偷前一个房子)或者不偷这一个房子(这样就能偷前一个房子了),这两个情况用公式表示如下:
|
||||||
|
fn[i] = Math.max(fn[i - 1], fn[i - 2] + nums[i - 1]);
|
||||||
|
if (fn[i] > res) {
|
||||||
|
res = fn[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -14,13 +14,27 @@ import java.util.Arrays;
|
|||||||
public class Q213 {
|
public class Q213 {
|
||||||
|
|
||||||
public int rob(int[] nums) {
|
public int rob(int[] nums) {
|
||||||
int last = 0, cur = 0;
|
if (nums.length == 1) {
|
||||||
for (int num : nums) {
|
return nums[0];
|
||||||
int temp = cur;
|
} else {
|
||||||
cur = Math.max(cur, last + num);
|
return Math.max(robDo(Arrays.copyOfRange(nums, 0, nums.length - 1)), robDo(Arrays.copyOfRange(nums, 1, nums.length)));
|
||||||
last = temp;
|
|
||||||
}
|
}
|
||||||
return cur;
|
}
|
||||||
|
|
||||||
|
private int robDo(int[] nums) {
|
||||||
|
//定义fn[k]表示有k个房子时的最大金额
|
||||||
|
int[] fn = new int[nums.length + 1];
|
||||||
|
//显然fn[0]=0,fn[1]=nums[0]
|
||||||
|
fn[1] = nums[0];
|
||||||
|
int res = fn[1];
|
||||||
|
for (int i = 2; i <= nums.length; i++) {
|
||||||
|
//当发现新房子时要获得最大收益有两种选择,偷这个新房子(不能偷前一个房子)或者不偷这一个房子(这样就能偷前一个房子了),这两个情况用公式表示如下:
|
||||||
|
fn[i] = Math.max(fn[i - 1], fn[i - 2] + nums[i - 1]);
|
||||||
|
if (fn[i] > res) {
|
||||||
|
res = fn[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
46
5.leetcode/src/com/fanxb/common/Q337.java
Normal file
46
5.leetcode/src/com/fanxb/common/Q337.java
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
package com.fanxb.common;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 旋转链表
|
||||||
|
* 题目地址:https://leetcode-cn.com/problems/assign-cookies/submissions/
|
||||||
|
* 解题思路:
|
||||||
|
* 贪心算法,想不明白
|
||||||
|
*
|
||||||
|
* @author fanxb
|
||||||
|
* Date: 2020/6/9 15:10
|
||||||
|
*/
|
||||||
|
public class Q337 {
|
||||||
|
|
||||||
|
|
||||||
|
public int rob(TreeNode root) {
|
||||||
|
return robDo(root, new HashMap<>());
|
||||||
|
}
|
||||||
|
|
||||||
|
public int robDo(TreeNode root, Map<TreeNode, Integer> map) {
|
||||||
|
if (root == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
Integer val = map.get(root);
|
||||||
|
if (val != null) {
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
//从根节点看起,根节点如果选择投了钱那么他的两个子节点都不能投钱,此是偷的钱的和为根节点的钱+从根节点孙子结点开始偷的钱的综合
|
||||||
|
//如果根节点不偷,那么他的两个子节点都可以投钱,此时偷钱的和为从两个子节点开始偷到的钱的综合
|
||||||
|
//然后再把子节点当作根节点来看就得到了递归关系
|
||||||
|
//sum1:两个孩子节点能偷到的钱
|
||||||
|
int sum1 = robDo(root.left, map) + robDo(root.right, map);
|
||||||
|
//四个孙子和roo节点能偷盗的钱
|
||||||
|
int sum2 = root.val + (root.left == null ? 0 : (robDo(root.left.left, map) + robDo(root.left.right, map))) + (root.right == null ? 0 : (robDo(root.right.left, map) + robDo(root.right.right, map)));
|
||||||
|
val = Math.max(sum1, sum2);
|
||||||
|
map.put(root, val);
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
}
|
||||||
|
}
|
20
5.leetcode/src/com/fanxb/common/TreeNode.java
Normal file
20
5.leetcode/src/com/fanxb/common/TreeNode.java
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package com.fanxb.common;
|
||||||
|
|
||||||
|
public class TreeNode {
|
||||||
|
int val;
|
||||||
|
TreeNode left;
|
||||||
|
TreeNode right;
|
||||||
|
|
||||||
|
TreeNode() {
|
||||||
|
}
|
||||||
|
|
||||||
|
TreeNode(int val) {
|
||||||
|
this.val = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
TreeNode(int val, TreeNode left, TreeNode right) {
|
||||||
|
this.val = val;
|
||||||
|
this.left = left;
|
||||||
|
this.right = right;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user