zoukankan      html  css  js  c++  java
  • 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;

    }

  • 相关阅读:
    jQuery 核心
    Js实现内容向上无缝循环滚动
    浅析CSS postion属性值用法
    JS原生Ajax请求
    详解SQL集合运算
    Windows上开启IIS
    poj 4618 暴力
    hdu 4614 线段树
    poj 3468 线段树
    hdu 1698 线段树成段更新
  • 原文地址:https://www.cnblogs.com/visper/p/10046080.html
Copyright © 2011-2022 走看看