力扣122. 买卖股票的最佳时机 II(动态规划)
买入:
i当天买入i当天不买入i当天买入的最大收益i-1天卖出的最大收益-i当天的股价i-1买入的最大收益,维持现状in[i]out[i-1]-prices[i]in[i-1]卖出:
i当天卖出i当天不卖出i当天卖出的最大收益i-1天买入的最大收益+i当天的股价i-1天卖出的最大收益,维持原状out[i]out[i-1]+prices[i]out[i-1]因为可以多次买卖,因此i当天买入的最大收益其中一种情况:i当天买入(i-1天卖出的最大收益-i当天的股价)。
如果只有一次买卖,其实限制的也是买入的情况,而不管卖出的时机。
// // main.cpp // 122maxProfit // // Created by MXQ on 2020/10/22. // #include <iostream> #include<vector> using namespace::std; class Solution { public: int maxProfit(vector<int>& prices) { int n=prices.size(); if(n==0 || n==1)return 0; vector<int>in(n); vector<int>out(n); out[0]=0; in[0]=-prices[0]; int maxoutvalue=0; for (int i=1; i<n; i++) { //转移方程 in[i]=max(out[i-1]-prices[i],in[i-1]); out[i]=max(in[i-1]+prices[i],out[i-1]); if (out[i]>maxoutvalue) { maxoutvalue=out[i]; } } return maxoutvalue; } }; int main(int argc, const char * argv[]) { // insert code here... vector<int>prices={1,2,3,4,5}; Solution s; auto result=s.maxProfit(prices); std::cout << result<<endl; std::cout << "Hello, World!\n"; return 0; }
