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;
}