mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 03:34:02 +08:00
将误添加到122贪心的java空间优化代码加到了122动态规划处
This commit is contained in:
@ -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
|
||||
|
@ -147,25 +147,30 @@ class Solution
|
||||
}
|
||||
return dp[n - 1][0]; // 卖出股票收益高于持有股票收益,因此取[0]
|
||||
}
|
||||
|
||||
// 实现2:变量存储
|
||||
// 第一种方法需要用二维数组存储,有空间开销,其实关心的仅仅是前一天的状态,不关注更多的历史信息
|
||||
// 因此,可以仅保存前一天的信息存入 dp0、dp1 这 2 个变量即可
|
||||
// 时间复杂度:O(n),空间复杂度O(1)
|
||||
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;
|
||||
}
|
||||
return dp0;
|
||||
```
|
||||
|
||||
```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:
|
||||
|
||||
> 版本一:
|
||||
|
Reference in New Issue
Block a user