将误添加到122贪心的java空间优化代码加到了122动态规划处

This commit is contained in:
LiHua
2021-11-25 21:26:43 +08:00
parent 09a19372ba
commit b18f227ffb
2 changed files with 17 additions and 31 deletions

View File

@ -167,25 +167,6 @@ class Solution { // 动态规划
}
```
```java
// 优化空间
class Solution {
public int maxProfit(int[] prices) {
int[] dp = new int[2];
// 0表示持有1表示卖出
dp[0] = -prices[0];
dp[1] = 0;
for(int i = 1; i <= prices.length; i++){
// 前一天持有; 或当天卖出然后买入
dp[0] = Math.max(dp[0], dp[1] - prices[i-1]);
// 前一天卖出; 或当天卖出,当天卖出,得先持有
dp[1] = Math.max(dp[1], dp[0] + prices[i-1]);
}
return dp[1];
}
}
```
Python:
```python

View File

@ -147,25 +147,30 @@ class Solution
}
return dp[n - 1][0]; // 卖出股票收益高于持有股票收益,因此取[0]
}
}
```
// 实现2变量存储
// 第一种方法需要用二维数组存储,有空间开销,其实关心的仅仅是前一天的状态,不关注更多的历史信息
// 因此,可以仅保存前一天的信息存入 dp0、dp1 这 2 个变量即可
// 时间复杂度O(n)空间复杂度O(1)
```java
// 优化空间
class Solution {
public int maxProfit(int[] prices) {
int n = prices.length;
int dp0 = 0, dp1 = -prices[0]; // 定义变量,存储初始状态
for (int i = 1; i < n; ++i) {
int newDp0 = Math.max(dp0, dp1 + prices[i]); // 第 i 天,没有股票
int newDp1 = Math.max(dp1, dp0 - prices[i]); // 第 i 天,持有股票
dp0 = newDp0;
dp1 = newDp1;
int[] dp = new int[2];
// 0表示持有1表示卖出
dp[0] = -prices[0];
dp[1] = 0;
for(int i = 1; i <= prices.length; i++){
// 前一天持有; 既然不限制交易次数,那么再次买股票时,要加上之前的收益
dp[0] = Math.max(dp[0], dp[1] - prices[i-1]);
// 前一天卖出; 或当天卖出,当天卖出,得先持有
dp[1] = Math.max(dp[1], dp[0] + prices[i-1]);
}
return dp0;
return dp[1];
}
}
```
Python
> 版本一: