1、看不出來,腦筋急轉彎?只要下一天高就賣出當天還可以買入迭代就好了。。
2、
class Solution {
public:
int maxProfit(vector<int>& prices) {
int sum=0;
for(int i=0;i<prices.size()-1;i++)
{
int j=i+1;
if(prices[i]<prices[j])
{
sum+=prices[j]-prices[i];
//i++;
}
}
return sum;
}
};
3、還是別人寫的動態規劃看着很舒服
.動態規劃
第iii天僅有兩種狀態:持有或不持有.
假設數組dp[i][0]表示第i天不持有股票時的利益:dp[0][0] = 0
dp[i][1]表示第i天持有股票時的利益:dp[0][1] = -prices[0]
相關的狀態分析如下:
持有狀態:
1.今天買入:則昨天是不持有的狀態,當天利益爲dp[i-1][0]-prices[i];
2.前一天也持有:今天沒有賣出,當天利益爲dp[i-1][1];
取其大着作爲當天持有狀態下的利益。
非持有狀態:
1.今天賣出:則昨天是持有的狀態,當天利益爲dp[i-1][1]+prices[i];
2.前一天也不持有:則今天也沒有買入,當天利益就是前一天利益,即dp[i-1][0];
取其大者作爲當天非持有狀態下的利益。
最後一天不持有股票時的利益即爲最大利潤.
class Solution {
public:
int maxProfit(vector<int>& prices) {
// 動態規劃解法
// 0.初始判斷
if(prices.empty()) return 0;
int dp[prices.size()][2];
// 1.初始狀態
dp[0][0] = 0;//不持有
dp[0][1] = -prices[0];
// 2.狀態轉移
for(int i = 1; i<prices.size();i++){
// 3.狀態轉移方程
dp[i][0] = max(dp[i-1][0], dp[i-1][1] + prices[i]);
dp[i][1] = max(dp[i-1][1], dp[i-1][0] - prices[i]);
}
return dp[prices.size()-1][0];
}
};