其他分享
首页 > 其他分享> > 牛客题霸--股票交易的最大收益

牛客题霸--股票交易的最大收益

作者:互联网

股票交易的最大收益

题目链接

Solution

已经知道每一天股票的价格,可以无限次交易,每天只能进行一次,询问最大收益。
这类问题可以动态规划解决。
设$f[i]$表示到第i天的时候,最大收益是多少。
首先$f[i]$可以直接从上一天继承过来,即$f[i] = f[i - 1]$。
其次,如果在第i天卖出,那么需要选择一天买入,设第j天买入,则$f[i] = max{f[j - 1] + a[i] - a[j]},\ j \in [0,i-1]$
如果第i天买入的话,到i后面的时候,会枚举到在第i天买入的情况。
这样做是$O(n^2)$的。

观察转移方程发现,$f[j - 1] - a[j]$对于一个j是固定的,所以用一个变量记录下这个式子的最大值即可。
复杂度$O(n)$

Code


class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int n = prices.size(); 
        int f[n + 10], mx = -prices[0];
        f[0] = 0;
        for (int i = 1; i < n; ++i) {
        	f[i] = max(f[i - 1], mx + prices[i]);
        	mx = max(mx, f[i - 1] - prices[i]);
		}
		return f[n  - 1];
    }
};

标签:prices,--,max,Solution,int,买入,股票交易,客题,mx
来源: https://www.cnblogs.com/mjt233/p/14044383.html