力扣面试150题 买卖股票的最佳时机IV

发布时间:2024年01月06日

给你一个整数数组?prices?和一个整数?k?,其中?prices[i]?是某支给定的股票在第?i?天的价格。

设计一个算法来计算你所能获取的最大利润。你最多可以完成?k?笔交易。也就是说,你最多可以买?k?次,卖?k?次。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

解法:其实和上一篇文章 买卖股票III差不多,这里由买卖最多2次变成了k次。

由上一篇文章其实可以发现,数组下标奇数是买,偶数是卖,那么我们写个内层循环就好啦。

记得要初始化dp数组哦。

class Solution {
public:
    int maxProfit(int k, vector<int>& prices) {
        int n =  prices.size();
        int dp[n][k*2+10];
        memset(dp,0,sizeof dp);
        dp[0][0]=0;
        //奇数表买入
        //偶数表卖出
        for(int i=1;i<2*k+1;i++)
        {
            if(i%2)dp[0][i]=-prices[0];
        }
        for(int i=1;i<n;i++)
        {
            dp[i][0]=dp[i-1][0];
            for(int j=1;j<=2*k;j++)
            {
                if(j%2)
                {
                    dp[i][j]=max(dp[i-1][j],dp[i][j-1]-prices[i]);
                }
                else
                {
                    dp[i][j]=max(dp[i-1][j],dp[i][j-1]+prices[i]);
                }
            }
        }
        return dp[n-1][k*2];

        
    }
    
};

文章来源:https://blog.csdn.net/weixin_63022020/article/details/135416688
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。