zoukankan      html  css  js  c++  java
  • 每日编程-20170407

    题目描述
    在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于2),规则是必须一笔成交后进行另一笔(即买-卖-买-卖的顺序进行)。给出一天中的股票变化序列,请写一个程序计算一天可以获得的最大收益。请采用实践复杂度低的方法实现。
    给定价格序列prices及它的长度n,请返回最大收益。保证长度小于等于500。
    测试样例:
    [10 22 5 75 65 80],6
    返回:87

    解答:

    分别计算前i天发生一次交易的最大收益,以及i+1到n天发生一次交易的最大收益

    两者求和,遍历i得到最大值

    另:用迭代器的话,n都省了

    本题来源是牛客网

     1 class Stock {
     2 public:
     3     int Max(int a, int b) { return a < b ? b : a; }
     4     int maxDif(vector<int>::iterator beg,const vector<int>::iterator &end) {
     5     int answer = 0;
     6     for (; beg != end; beg++)
     7     {
     8         for (auto backV = beg + 1; backV != end + 1; backV++)
     9         {
    10             answer = Max(*backV - *beg, answer);
    11         }
    12     }
    13     return answer;
    14 }
    15 int maxProfit(vector<int> prices,int n) {
    16     // write code here
    17     int answer = 0;
    18     for (auto beg = prices.begin() + 1; beg != prices.end() - 2; beg++)
    19     {
    20         int m1 = maxDif(prices.begin(), beg);
    21         int m2 = maxDif(beg + 1, prices.end() - 1);
    22         answer = Max(m1 + m2, answer);
    23     }
    24     return answer;
    25 }
    26 };
  • 相关阅读:
    [ AHOI 2013 ] 作业 & [ BZOJ 3809 ] Gty的二逼妹子序列
    [ CQOI 2018 ] 异或序列
    [ Luogu 3709 ] 大爷的字符串题
    偷学笔记
    ZJOI2019 补题记录
    Bluestein's Algorithm
    「九省联考 2018」制胡窜
    Codeforces 1349D Bear and Biscuits
    AGC021E Ball Eat Chameleons
    AGC036F Square Constraints
  • 原文地址:https://www.cnblogs.com/linhaowei0389/p/6677830.html
Copyright © 2011-2022 走看看