Skip to content

Commit 72ed7f8

Browse files
第四周作业
1 parent 126556b commit 72ed7f8

5 files changed

Lines changed: 156 additions & 3 deletions

File tree

.idea/workspace.xml

Lines changed: 2 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Week_04/id_28/LeetCode_198_28.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
public class LeetCode_198_28 {
2+
public int rob(int[] nums) {
3+
4+
5+
Integer[] arr=new Integer[nums.length];
6+
//Integer max=Integer.MIN_VALUE;
7+
return nums.length==0 ? 0 : dp(nums,arr,nums.length-1);
8+
9+
}
10+
11+
public int dp(int[] nums,Integer[] arr,int i){
12+
if(arr[i] == null){
13+
if (i==0){
14+
arr[i] = nums[0];
15+
}else if(i==1){
16+
arr[i] = Math.max(nums[0],nums[1]);
17+
}else {
18+
arr[i]=Math.max(dp(nums,arr,i-2)+nums[i],dp(nums,arr,i-1));
19+
}
20+
}
21+
return arr[i];
22+
}
23+
24+
public static void main(String[] args) {
25+
int[] arr= {1,2,3,1};
26+
System.out.println(new LeetCode_198_28().rob(arr));
27+
System.out.println("hello");
28+
}
29+
}

Week_04/id_28/LeetCode_213_28.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
public class LeetCode_213_28 {
2+
public int rob(int[] nums) {
3+
4+
5+
Integer[] arr1=new Integer[nums.length];
6+
Integer[] arr2=new Integer[nums.length];
7+
8+
return nums.length==0 ? 0 : Math.max(dp1(nums,arr1,nums.length-1),dp2(nums,arr2,nums.length-1));
9+
10+
}
11+
12+
public int dp1(int[] nums,Integer[] arr,int i){
13+
if(arr[i] == null){
14+
if (i==0){
15+
arr[i] = nums[0];
16+
}else if(i==1){
17+
arr[i] = nums[0];
18+
}else if(i<nums.length-1){
19+
arr[i]=Math.max(dp1(nums,arr,i-2)+nums[i],dp1(nums,arr,i-1));
20+
}else {
21+
arr[i]=dp1(nums,arr,i-1);
22+
}
23+
}
24+
return arr[i];
25+
}
26+
27+
28+
public int dp2(int[] nums,Integer[] arr,int i){
29+
if(arr[i] == null){
30+
if (i==0){
31+
arr[i] = 0;
32+
}else if(i==1){
33+
arr[i] = nums[1];
34+
}else {
35+
arr[i]=Math.max(dp2(nums,arr,i-2)+nums[i],dp2(nums,arr,i-1));
36+
}
37+
}
38+
return arr[i];
39+
}
40+
41+
42+
43+
public static void main(String[] args) {
44+
int[] arr= {1,2,1,1};
45+
System.out.println(new LeetCode_213_28().rob(arr));
46+
}
47+
}

Week_04/id_28/LeetCode_337_28.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import levelTravel429.Node;
2+
3+
import java.util.*;
4+
5+
public class LeetCode_337_28 {
6+
7+
8+
9+
public int rob(TreeNode root) {
10+
if(root==null){
11+
return 0;
12+
}
13+
Map<TreeNode,Integer> map=new HashMap<TreeNode,Integer>();
14+
return dp(root,map);
15+
16+
}
17+
18+
public Integer dp(TreeNode node,Map<TreeNode,Integer> map){
19+
if (node==null){
20+
return 0;
21+
}
22+
if(!map.containsKey(node) ){
23+
int left=dp(node.left,map);
24+
int right=dp(node.right,map);
25+
int left_left=(node.left==null? 0:dp(node.left.left,map));
26+
int left_right=(node.left==null? 0:dp(node.left.right,map));
27+
int right_left=(node.right==null? 0:dp(node.right.left,map));
28+
int right_right=(node.right==null? 0:dp(node.right.right,map));
29+
map.put(node,Math.max(Math.max(Math.max(left+right,
30+
(node.left==null? 0:node.left.val)+right_left+right_right),
31+
(node.right==null? 0:node.right.val)+left_left+left_right),
32+
node.val+left_left+left_right+right_left+right_right));
33+
}
34+
System.out.println(map.get(node));
35+
return map.get(node);
36+
}
37+
38+
public static void main(String[] args) {
39+
TreeNode root=new TreeNode(1);
40+
root.left=new TreeNode(2);
41+
root.right=new TreeNode(3);
42+
System.out.println(new LeetCode_337_28().rob(root));
43+
}
44+
}

Week_04/id_28/LeetCode_53_28.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
public class LeetCode_53_28 {
2+
3+
public int maxSubArray(int[] nums) {
4+
5+
int maxArrayLength=Integer.MIN_VALUE;
6+
Integer[] arr=new Integer[nums.length];
7+
for (int i=0;i<nums.length;i++){
8+
maxArrayLength=Math.max(maxArrayLength,max(nums,arr,i));
9+
10+
}
11+
return maxArrayLength;
12+
}
13+
14+
15+
public int max(int[] nums,Integer[] arr,int index){
16+
if(arr[index]!=null){
17+
return arr[index];
18+
}
19+
if(index==0){
20+
arr[0]=nums[0];
21+
return nums[0];
22+
}else {
23+
int ret= Math.max(0,max(nums,arr,index-1)) + nums[index];
24+
arr[index] =ret ;
25+
return ret ;
26+
}
27+
}
28+
29+
public static void main(String[] args) {
30+
int[] arr= {-2,1,-3,4,-1,2,1,-5,4};
31+
System.out.println(new LeetCode_53_28().maxSubArray(arr));
32+
}
33+
34+
}

0 commit comments

Comments
 (0)