Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 051dfbf

Browse files
committed
20190312
1 parent 5d8c459 commit 051dfbf

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

‎code/lc120.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package code;
2+
3+
import java.util.List;
4+
/*
5+
* 120. Triangle
6+
* 题意:三角形的矩阵,求值最小的路径
7+
* 难度:Medium
8+
* 分类:Array, Dynamic Porgramming
9+
* 思路:动态规划 dp[i] = min(dp[i-1],dp[i]) + val
10+
* Tips:
11+
*/
12+
public class lc120 {
13+
public int minimumTotal(List<List<Integer>> triangle) {
14+
int len = triangle.get(triangle.size()-1).size();
15+
int[] dp = new int[len];
16+
int[] dp2 = new int[len];
17+
int index = 0;
18+
int res = Integer.MAX_VALUE;
19+
while(index<triangle.size()){
20+
List<Integer> ls = triangle.get(index);
21+
res = Integer.MAX_VALUE;
22+
for (int i = 0; i < ls.size() ; i++) {
23+
if(i==0) dp2[i] = dp[i] + ls.get(i);
24+
else if(i==ls.size()-1) dp2[i] = dp[i-1] + ls.get(i); //注意是 i==ls.size()-1
25+
else dp2[i] = Math.min(dp[i-1],dp[i]) + ls.get(i);
26+
res = Math.min(dp2[i], res);
27+
}
28+
dp = dp2; //两个一维数组
29+
dp2 = new int[len];
30+
index++;
31+
}
32+
return res;
33+
}
34+
}

‎code/lc213.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package code;
2+
3+
import java.util.Arrays;
4+
/*
5+
* 213. House Robber II
6+
* 题意:数组最大和,不能选取相邻的两个数。数组首尾是连着的
7+
* 难度:Medium
8+
* 分类:Dynamic Programming
9+
* 思路:分别把第一个元素置0和最后一个元素置0,用lc198的解法
10+
*
11+
* Tips:lc198
12+
*/
13+
public class lc213 {
14+
public int rob(int[] nums) { //分别把第一个元素置0和最后一个元素置0,用lc198的解法
15+
if(nums.length == 0)
16+
return 0;
17+
if(nums.length == 1)
18+
return nums[0];
19+
int res1 = helper(Arrays.copyOf(nums, nums.length-1));
20+
nums[0] = 0;
21+
int res2 = helper(nums);
22+
return Math.max(res1, res2);
23+
}
24+
25+
public int helper(int[] nums) {
26+
if(nums.length == 0)
27+
return 0;
28+
if(nums.length == 1)
29+
return nums[0];
30+
int[] dp = new int[nums.length];
31+
dp[0] = nums[0];
32+
dp[1] = Math.max(nums[0], nums[1]);
33+
for (int i = 2; i < nums.length ; i++) {
34+
dp[i] = Math.max((dp[i-2] + nums[i]),dp[i-1]); //dp[i] 表示以 0~i 的数组的结果
35+
}
36+
return dp[nums.length-1];
37+
}
38+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /