188.买卖股票的最佳时机IV
Posted HardyDragon_CC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了188.买卖股票的最佳时机IV相关的知识,希望对你有一定的参考价值。
188.买卖股票的最佳时机IV
思路
- dp 二维数组的含义是 第 i 天第 k 次交易状态(买入卖出)的利润;
- 初始化dp数组时,所有的买入都是 -price[0];所有的卖出都是 0;
- 递推的是第 k 次买入和卖出的利润;
- 最后要返回的最后一次卖出的利润,所以递推时 要使得
j + 2 = 2 * k
,即遍历条件为for(int j = 0;j <= 2 * k - 2;j += 2)
;最后return dp[size - 1][2 * k];
class Solution
public int maxProfit(int k, int[] prices)
if(prices.length == 0) return 0;
int size = prices.length;
// k 次交易,每次可以买或不买,还有一个是不操作,一共 2 * k + 1 情况
int[][] dp = new int[size][2 * k + 1];
// 所有的买入初始化都是负
for(int i = 1;i < 2 * k;i+=2)
dp[0][i] = -prices[0];
for(int i = 1;i < size;i++)
// j 的遍历方式,每次递增 2
for(int j = 0;j <= 2 * k - 2;j += 2)
// 第k次买入,可能是之前就买了,可能是今天才买
dp[i][j + 1] = Math.max(dp[i-1][j + 1],dp[i-1][j] - prices[i]);
// 第k次卖,可能是之前就卖了,也可能是今天才卖
dp[i][j + 2] = Math.max(dp[i-1][j + 2],dp[i-1][j + 1] + prices[i]);
// 第k次卖出是最高利润
return dp[size - 1][2 * k];
以上是关于188.买卖股票的最佳时机IV的主要内容,如果未能解决你的问题,请参考以下文章