LeetCode188:Best Time to Buy and Sell Stock IV

Say you have an array for which the ith element is the price of a given stock on day i.

Design an algorithm to find the maximum profit. You may complete at most k transactions.

Note:

You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).

Credits:

Special thanks to @Freezen for adding this problem and creating all test cases.

K次交易的问题。

直接考虑这个问题会有点复杂,但是可以借助于前一篇Best Time to Buy and Sell Stock III的第种解法的思想。

记selln[i]表示第i比交易卖出时的最大收入,buyn[i]表示第i比交易买入时的最大收入。

共有k比交易,那么有:

selln[k]=max(selln[k],buyn[k]+prices[j])

buyn[k]=max(buyn[k],selln[k-1]+prices[j])

selln[k-1]=max(selln[k-1],buyn[k-1]+prices[j])

buyn[k-1]=max(buyn[k-1],selln[k-2]+prices[j])

......

selln[i]=max(selln[i],buyn[i]+prices[j])

buyn[i]=max(buyn[i],selln[i-1]+prices[j])

上面的式子使用一个循环就可以表示了。

需要注意的一点是如果k大于了prices.size(),那么这就是最简单的情况,不需要使用上面的分析方法。时间复杂度是O(kn),空间复杂度是O(n)。

runtime:8ms

class Solution {
public:

    int maxProfit(int k, vector<int>& prices) {
        int length=prices.size();
        if(length==0||length==1)
            return 0;
        if(k>length)
        {
            int ans=0;
            for(int i=1;i<length;i++)
                ans+=max(prices[i]-prices[i-1],0);

            return ans;
        }

        int *buyn=new  int[k+1]();
        int *selln=new  int[k+1]();
        for(int i=0;i<=k;i++)
        {
            buyn[i]=numeric_limits<int>::min();
            selln[i]=0;
        }
        for(int i=0;i<prices.size();i++)
        {
           		for(int j=k;j>0;j--)
		        {
		        	selln[j]=max(selln[j],buyn[j]+prices[i]);
		        	buyn[j]=max(buyn[j],selln[j-1]-prices[i]);
	        	}
        }
        return selln[k];
    }
};
时间: 2024-10-30 02:26:31

LeetCode188:Best Time to Buy and Sell Stock IV的相关文章

【LeetCode】Best Time to Buy and Sell Stock IV

Best Time to Buy and Sell Stock IV Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete at most k transactions. Note: You may not engage in multiple t

Java for LeetCode 188 Best Time to Buy and Sell Stock IV【HARD】

Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete at most k transactions. 解题思路: 本题是Best Time to Buy and Sell Stock系列最难的一道,需要用到dp,JAVA实现如下: public i

[LeetCode] Best Time to Buy and Sell Stock IV 买卖股票的最佳时间之四

Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete at most k transactions. Note:You may not engage in multiple transactions at the same time (ie, yo

[LeetCode][Java] Best Time to Buy and Sell Stock IV

题目: Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete at most k transactions. Note: You may not engage in multiple transactions at the same time (i

Best Time to Buy and Sell Stock IV

Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete at most k transactions. Note: You may not engage in multiple transactions at the same time (ie, y

Lintcode393 Best Time to Buy and Sell Stock IV solution 题解

[题目描述] Say you have an array for which the i th element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete at most k transactions. Notice:You may not engage in multiple transactions at the same ti

188. Best Time to Buy and Sell Stock IV (Array; DP)

Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete at most k transactions. Note:You may not engage in multiple transactions at the same time (ie, yo

[LeetCode] Best Time to Buy and Sell Stock IV

Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete at most k transactions. Note: You may not engage in multiple transactions at the same time (ie, y

LeetCode——Best Time to Buy and Sell Stock IV

Description: Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete at most k transactions. Note:You may not engage in multiple transactions at the same