Skip to content

Commit b8d2f7e

Browse files
committed
20190307
1 parent d3e07b1 commit b8d2f7e

File tree

4 files changed

+84
-0
lines changed

4 files changed

+84
-0
lines changed

code/lc303.java

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package code;
2+
/*
3+
* 303. Range Sum Query - Immutable
4+
* 题意:i到j的和
5+
* 难度:Easy
6+
* 分类:Dynamic Programming
7+
* 思路:
8+
* Tips:Bingo!
9+
*/
10+
public class lc303 {
11+
class NumArray {
12+
int[] arr;
13+
public NumArray(int[] nums) {
14+
arr = nums;
15+
for(int i=1; i<arr.length; i++){
16+
arr[i] = arr[i-1]+arr[i];
17+
}
18+
}
19+
20+
public int sumRange(int i, int j) {
21+
return i==0? arr[j] : arr[j]-arr[i-1];
22+
}
23+
}
24+
25+
/**
26+
* Your NumArray object will be instantiated and called as such:
27+
* NumArray obj = new NumArray(nums);
28+
* int param_1 = obj.sumRange(i,j);
29+
*/
30+
}

code/lc746.java

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package code;
2+
/*
3+
* 746. Min Cost Climbing Stairs
4+
* 题意:上楼梯,变了一下形
5+
* 难度:Easy
6+
* 分类:Array, Dynamic Programming
7+
* 思路:
8+
* Tips:Bingo!
9+
*/
10+
public class lc746 {
11+
public int minCostClimbingStairs(int[] cost) {
12+
if(cost.length==1) return cost[0];
13+
int dp1 = cost[0], dp2 = cost[1], dp3 = Integer.MAX_VALUE;
14+
for(int i=2; i<cost.length; i++){
15+
dp3 = Math.min(dp1+cost[i], dp2+cost[i]);
16+
dp1 = dp2;
17+
dp2 = dp3;
18+
}
19+
return Math.min(dp1,dp2); //注意下返回值,还要比较一下
20+
}
21+
}

code/lc877.java

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package code;
2+
/*
3+
* 877. Stone Game
4+
* 题意:两个人拿石头堆,每次只能从最左边或最右边拿
5+
* 难度:Medium
6+
* 分类:Math, Dynamic Programming, Minimax
7+
* 思路:之前做过有印象,先拿的人一定赢的。
8+
* dp的思路需要借鉴一下的, dp[i][j] 表示数组 i~j 的最优解
9+
* 向两边拓展的dp, 用一个变量表示 size 这个dp。想想一下三角形的区域是怎么一步步被填满的
10+
* 拿了piles[i], 则dp[i+1][j]就被另一个人拿了,结果是 piles[i] - dp[i + 1][j]
11+
* 拿了piles[j], 则dp[i][j-1]就被另一个人拿了,结果是 piles[j] - dp[i][j - 1]
12+
* Tips:
13+
*/
14+
public class lc877 {
15+
public boolean stoneGame(int[] piles) {
16+
return true;
17+
}
18+
19+
public boolean stoneGame2(int[] piles) {
20+
int[][] dp = new int[piles.length][piles.length];
21+
for (int i = 0; i < piles.length ; i++) dp[i][i] = piles[i]; //最后是第二个人拿的,用符号
22+
for (int size = 1; size < piles.length ; size++) { //外循环是 size
23+
for (int i = 0; i+size < piles.length ; i++) { //size<len
24+
dp[i][i+size] = Math.max(piles[i]-dp[i+1][i+size], piles[i+size]-dp[i][i+size-1]);
25+
}
26+
}
27+
return dp[0][piles.length-1]>0;
28+
}
29+
30+
}

readme.md

+3
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ LeetCode 指南
157157
| 297 [Java](./code/lc297.java)
158158
| 300 [Java](./code/lc300.java)
159159
| 301 [Java](./code/lc301.java)
160+
| 303 [Java](./code/lc303.java)
160161
| 309 [Java](./code/lc309.java)
161162
| 312 [Java](./code/lc312.java)
162163
| 315 [Java](./code/lc315.java)
@@ -196,4 +197,6 @@ LeetCode 指南
196197
| 617 [Java](./code/lc617.java)
197198
| 621 [Java](./code/lc621.java)
198199
| 647 [Java](./code/lc647.java)
200+
| 746 [Java](./code/lc746.java)
199201
| 771 [Java](./code/lc771.java)
202+
| 877 [Java](./code/lc877.java)

0 commit comments

Comments
 (0)