@@ -2415,35 +2415,27 @@ public int climbStairs(int n) {
24152415定义 dp 数组用来存储最大的抢劫量,其中 dp[ i] 表示抢到第 i 个住户时的最大抢劫量。
24162416
24172417由于不能抢劫邻近住户,因此如果抢劫了第 i 个住户那么只能抢劫 i - 2 或者 i - 3 的住户,所以
2418-
2419- <div align =" center " ><img src =" https://latex.codecogs.com/gif.latex?dp[i]=max(dp[i-2],dp[i-3])+nums[i] " /></div > <br >
2418+ dp[ i] = max(dp[ i-1] , dp[ i-2] + nums[ i] ) <br >
24202419
24212420``` java
24222421public int rob(int [] nums) {
2423- int n = nums. length;
2424- if (n == 0 ) {
2425- return 0 ;
2426- }
2427- if (n == 1 ) {
2428- return nums[0 ];
2429- }
2430- int pre3 = 0 , pre2 = 0 , pre1 = 0 ;
2431- for (int i = 0 ; i < n; i++ ) {
2432- int cur = Math . max(pre2, pre3) + nums[i];
2433- pre3 = pre2;
2422+ int pre2 = 0 , pre1 = 0 ;
2423+ for (int i = 0 ; i < nums. length; i++ ) {
2424+ int cur = Math . max(pre2 + nums[i], pre1);
24342425 pre2 = pre1;
24352426 pre1 = cur;
24362427 }
2437- return Math . max( pre1, pre2) ;
2428+ return pre1;
24382429}
2430+
24392431```
24402432
24412433** 强盗在环形街区抢劫**
24422434
24432435[ 213. House Robber II (Medium)] ( https://leetcode.com/problems/house-robber-ii/description/ )
24442436
24452437``` java
2446- public int rob(int [] nums) {
2438+ public int rob(int [] nums) {
24472439 if (nums == null || nums. length == 0 ) {
24482440 return 0 ;
24492441 }
@@ -2454,15 +2446,14 @@ public int rob(int[] nums) {
24542446 return Math . max(rob(nums, 0 , n - 2 ), rob(nums, 1 , n - 1 ));
24552447}
24562448
2457- private int rob(int [] nums, int first, int last) {
2458- int pre3 = 0 , pre2 = 0 , pre1 = 0 ;
2449+ private int rob(int [] nums, int first, int last) {
2450+ int pre2 = 0 , pre1 = 0 ;
24592451 for (int i = first; i <= last; i++ ) {
2460- int cur = Math . max(pre3, pre2) + nums[i];
2461- pre3 = pre2;
2452+ int cur = Math . max(pre1, pre2 + nums[i]);
24622453 pre2 = pre1;
24632454 pre1 = cur;
24642455 }
2465- return Math . max(pre2, pre1) ;
2456+ return pre1;
24662457}
24672458```
24682459
@@ -2514,9 +2505,9 @@ public int minPathSum(int[][] grid) {
25142505 for (int i = 0 ; i < m; i++ ) {
25152506 for (int j = 0 ; j < n; j++ ) {
25162507 if (i == 0 ) {
2517- dp[j] = dp[j - 1 ];
2508+ if (j > 0 ) dp[j] = dp[j - 1 ];
25182509 } else {
2519- dp[j] = Math . min(dp[j - 1 ], dp[j]);
2510+ if (j > 0 ) dp[j] = Math . min(dp[j - 1 ], dp[j]);
25202511 }
25212512 dp[j] += grid[i][j];
25222513 }
@@ -7063,4 +7054,3 @@ public int[] countBits(int num) {
70637054- 何海涛, 软件工程师. 剑指 Offer: 名企面试官精讲典型编程题[ M] . 电子工业出版社, 2014.
70647055- 《编程之美》小组. 编程之美[ M] . 电子工业出版社, 2008.
70657056- 左程云. 程序员代码面试指南[ M] . 电子工业出版社, 2015.
7066-
0 commit comments