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 ",Maxans);

}

return 0;

}

原文地址:https://www.cnblogs.com/visper/p/10046080.html