Leetcode 股票交易(c++)
Best Time to Buy and Sell Stock III
給定每一天的股票價格(用 price陣列來儲存) 限定條件是至多隻能交易兩次交易(一次買賣為一次交易)
#include <algorithm>
#include <iostream>
#include <string.h>
using namespace std;
const int Maxlen=1e5;
const int INF = 0x3f3f3f;
const int _INF = -0x3f3f3f;
int main(){
//區域性最優解 和 全域性最優解
//定義local[i][j]為到達第i天是最多可進行j次交易且最後一次交易在最後一天的最大利潤 為區域性最優解
//定義global[i][j]為到達第i天最多可以進行j次交易的最大利潤為全域性最優解
//給定每天的股票價格
//遍歷,計算出第x天之前的一次交易可以得到的最大效益,儲存到former[n]中
//遍歷,計算出第x天之後的一次交易可以得到的最大效益,儲存在latter[n]中
//遍歷,計算former[i] +latter[i] 得到最大效益max
int prices[Maxlen];//儲存每天的股票價值
int i,j,k,n;//n代表的是給定的天數
while(~scanf("%d",&n)){
for(i=0;i<n;i++)
scanf("%d",&prices[i]);
int former[Maxlen];//第n天前的一次交易的最大收益
int latter[Maxlen];//第n天后的一次交易的最大效益
int MinPrice=INF;
int MaxPrice=_INF;
int Maxans=0;
//分別通過遍歷求解former和latter陣列
for(i=1;i<n;i++){
MinPrice=min(MinPrice,prices[i]);
Maxans=max(Maxans,prices[i]-MinPrice);
former[i]=Maxans;
}
//其中Minprice代表的是n天之前的股票價格的最小值
//其中maxans代表的是n天之前當時的最大收益
for(i=n-1;i>=0;i--){
MaxPrice=max(MaxPrice,prices[i]);
Maxans=max(Maxans,MaxPrice-prices[i]);
latter[i]=Maxans;
}
Maxans=0;
for(i=0;i<n;i++){
Maxans=max(Maxans,former[i]+latter[i]);
}
printf("%d\n",Maxans);
}
return 0;
}