auto commit
This commit is contained in:
@ -1771,6 +1771,7 @@ public int minPathSum(int[][] grid) {
|
||||
|
||||
<div align="center"><img src="https://latex.codecogs.com/gif.latex?dp[i]=dp[i-1]+dp[i-2]"/></div>
|
||||
|
||||
|
||||
dp[N] 即为所求。
|
||||
|
||||
考虑到 dp[i] 只与 dp[i - 1] 和 dp[i - 2] 有关,因此可以只用两个变量来存储 dp[i - 1] 和 dp[i - 2] 即可,使得原来的 O(n) 空间复杂度优化为 O(1) 复杂度。
|
||||
@ -1800,6 +1801,7 @@ public int climbStairs(int n) {
|
||||
|
||||
<div align="center"><img src="https://latex.codecogs.com/gif.latex?dp[i]=dp[i-1]+dp[i-3]"/></div>
|
||||
|
||||
|
||||
**强盗抢劫**
|
||||
|
||||
[Leetcode : 198. House Robber (Easy)](https://leetcode.com/problems/house-robber/description/)
|
||||
@ -1810,6 +1812,7 @@ public int climbStairs(int n) {
|
||||
|
||||
<div align="center"><img src="https://latex.codecogs.com/gif.latex?dp[i]=max(dp[i-2],dp[i-3])+nums[i]"/></div>
|
||||
|
||||
|
||||
O(n) 空间复杂度实现方法:
|
||||
|
||||
```java
|
||||
@ -1890,6 +1893,7 @@ private int rob(int[] nums, int s, int e) {
|
||||
|
||||
<div align="center"><img src="https://latex.codecogs.com/gif.latex?dp[i]=(i-1)*dp[i-2]+(i-1)*dp[i-1]"/></div>
|
||||
|
||||
|
||||
dp[N] 即为所求。
|
||||
|
||||
和上楼梯问题一样,dp[i] 只与 dp[i-1] 和 dp[i-2] 有关,因此也可以只用两个变量来存储 dp[i-1] 和 dp[i-2]。
|
||||
@ -1906,6 +1910,7 @@ dp[N] 即为所求。
|
||||
|
||||
<div align="center"><img src="https://latex.codecogs.com/gif.latex?dp[n]=max\{1,dp[i]+1|S_i<S_n\&\&i<n\}"/></div>
|
||||
|
||||
|
||||
对于一个长度为 N 的序列,最长子序列并不一定会以 S<sub>N</sub> 为结尾,因此 dp[N] 不是序列的最长递增子序列的长度,需要遍历 dp 数组找出最大值才是所要的结果,即 max{ dp[i] | 1 <= i <= N} 即为所求。
|
||||
|
||||
**最长递增子序列**
|
||||
@ -2047,6 +2052,7 @@ public int lengthOfLCS(int[] nums1, int[] nums2) {
|
||||
|
||||
<div align="center"><img src="https://latex.codecogs.com/gif.latex?dp[i][j]=max(dp[i-1][j],dp[i-1][j-w]+v)"/></div>
|
||||
|
||||
|
||||
```java
|
||||
public int knapsack(int W, int N, int[] weights, int[] values) {
|
||||
int[][] dp = new int[N][W];
|
||||
@ -2071,6 +2077,7 @@ public int knapsack(int W, int N, int[] weights, int[] values) {
|
||||
|
||||
<div align="center"><img src="https://latex.codecogs.com/gif.latex?dp[j]=max(dp[j],dp[j-w]+v)"/></div>
|
||||
|
||||
|
||||
因为 dp[j-w] 表示 dp[i-1][j-w],因此不能先求 dp[i][j-w] 防止将 dp[i-1][j-w] 覆盖。也就是说要先计算 dp[i][j] 再计算 dp[i][j-w],在程序实现时需要按倒序来循环求解。
|
||||
|
||||
**无法使用贪心算法的解释**
|
||||
|
Reference in New Issue
Block a user