mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 02:53:31 +08:00
更换了188一维数组java解题代码
This commit is contained in:
@ -222,19 +222,32 @@ class Solution {
|
||||
//版本三:一维 dp数组
|
||||
class Solution {
|
||||
public int maxProfit(int k, int[] prices) {
|
||||
//在版本二的基础上,由于我们只关心前一天的股票买入情况,所以只存储前一天的股票买入情况
|
||||
if(prices.length==0)return 0;
|
||||
int[] dp=new int[2*k+1];
|
||||
for (int i = 1; i <2*k ; i+=2) {
|
||||
dp[i]=-prices[0];
|
||||
if(prices.length == 0){
|
||||
return 0;
|
||||
}
|
||||
for (int i = 0; i <prices.length ; i++) {
|
||||
for (int j = 1; j <2*k ; j+=2) {
|
||||
dp[j]=Math.max(dp[j],dp[j-1]-prices[i]);
|
||||
dp[j+1]=Math.max(dp[j+1],dp[j]+prices[i]);
|
||||
if(k == 0){
|
||||
return 0;
|
||||
}
|
||||
// 其实就是123题的扩展,123题只用记录2天的状态
|
||||
// 这里记录k天的状态就行了
|
||||
// 每天都有买入,卖出两个状态,所以要乘 2
|
||||
int[] dp = new int[2 * k];
|
||||
// 按123题解题格式那样,做一个初始化
|
||||
for(int i = 0; i < dp.length / 2; i++){
|
||||
dp[i * 2] = -prices[0];
|
||||
}
|
||||
for(int i = 1; i <= prices.length; i++){
|
||||
dp[0] = Math.max(dp[0], -prices[i - 1]);
|
||||
dp[1] = Math.max(dp[1], dp[0] + prices[i - 1]);
|
||||
// 还是与123题一样,与123题对照来看
|
||||
// 就很容易啦
|
||||
for(int j = 2; j < dp.length; j += 2){
|
||||
dp[j] = Math.max(dp[j], dp[j - 1] - prices[i-1]);
|
||||
dp[j + 1] = Math.max(dp[j + 1], dp[j] + prices[i - 1]);
|
||||
}
|
||||
}
|
||||
return dp[2*k];
|
||||
// 返回最后一天卖出状态的结果就行了
|
||||
return dp[dp.length - 1];
|
||||
}
|
||||
}
|
||||
```
|
||||
|
Reference in New Issue
Block a user