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;

    }

  • 相关阅读:
    5G NR:MAC 子层
    无线接口架构:PHY
    NR 演进之路: NR设计
    What is 5G Massive MIMO?
    CQI MCS 调度关系
    ubuntu离线安装mysql
    如何在Linux系统下的IntelliJ IDEA 2018.3.5下载与安装以及激活教程
    Java调用CMD命令
    文件和byte数组之间相互转换
    Java中两个或多个byte数组合并及int类型转数组
  • 原文地址:https://www.cnblogs.com/visper/p/10046080.html
Copyright © 2011-2022 走看看