File tree 4 files changed +84
-0
lines changed
4 files changed +84
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change @@ -157,6 +157,7 @@ LeetCode 指南
157
157
| 297 [ Java] ( ./code/lc297.java )
158
158
| 300 [ Java] ( ./code/lc300.java )
159
159
| 301 [ Java] ( ./code/lc301.java )
160
+ | 303 [ Java] ( ./code/lc303.java )
160
161
| 309 [ Java] ( ./code/lc309.java )
161
162
| 312 [ Java] ( ./code/lc312.java )
162
163
| 315 [ Java] ( ./code/lc315.java )
@@ -196,4 +197,6 @@ LeetCode 指南
196
197
| 617 [ Java] ( ./code/lc617.java )
197
198
| 621 [ Java] ( ./code/lc621.java )
198
199
| 647 [ Java] ( ./code/lc647.java )
200
+ | 746 [ Java] ( ./code/lc746.java )
199
201
| 771 [ Java] ( ./code/lc771.java )
202
+ | 877 [ Java] ( ./code/lc877.java )
You can’t perform that action at this time.
0 commit comments