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;

    }

  • 相关阅读:
    三部曲搭建本地nuget服务器(图文版)
    用批处理编译*.sln工程
    一组无序的整数找出出现次数大于一半的数字
    程序打怪升级之旅
    web开发有那些牛逼东西可以用
    Visual Studio for mac从入门到放弃1
    svn自动更新服务器最新代码
    WinRT支持GB2312
    初试Node —— node.js的安装
    为什么要重写equals方法和hashcode方法
  • 原文地址:https://www.cnblogs.com/visper/p/10046080.html
Copyright © 2011-2022 走看看