zoukankan      html  css  js  c++  java
  • 股票交易日

    题目描述

    在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于2),规则是必须一笔成交后进行另一笔(即买-卖-买-卖的顺序进行)。给出一天中的股票变化序列,请写一个程序计算一天可以获得的最大收益。请采用实践复杂度低的方法实现。

    给定价格序列prices及它的长度n,请返回最大收益。保证长度小于等于500。

    测试样例:
    [10,22,5,75,65,80],6
    返回:87
    实现算法:
    时间复杂度:O(n2)
    空间复杂度:常数
     1 class Stock {
     2 public:
     3     //两个下标,从头开始,一个在前一个在后;
     4     //如果后边值大于前边,更新结果;否则,后边下标更新成为前边
     5     //总之,要让小的始终处于后边
     6     int getOnce(vector<int> &p, int l, int r)
     7     {
     8         if(l >= r)
     9             return 0;
    10         int ans = INT_MIN;
    11         int i = l, j = i+1;
    12         while(j <= r)
    13         {
    14             if(p[j] > p[i])
    15                 ans = max(ans, p[j]-p[i]);
    16             else
    17                 i = j;
    18             j++;
    19         }
    20         return ans;
    21     }
    22     //分治,更新最大值(两次 >= 一次)
    23     int maxProfit(vector<int> prices, int n) {
    24         if(n <= 1)
    25             return 0;
    26         int res = 0;
    27         for(int i=1; i<n; i++)
    28         {
    29             int preProfit = getOnce(prices, 0, i);
    30             int postProfit = getOnce(prices, i+1, n-1);
    31             int tmp = preProfit + postProfit;
    32             res = max(res, tmp);
    33         }
    34         return res;
    35     }
    36 };
  • 相关阅读:
    RabbitMQ学习之:(一)初识、概念及心得
    给Eclipse_Android添加智能提示功能
    C#异步编程之:(三)使用TaskScheduler.UnobservedTaskException
    类设计技巧
    初始化块
    子类构造器
    静态域与静态方法
    构造器中调用另一个构造器
    重载
    无参数的构造器
  • 原文地址:https://www.cnblogs.com/yocichen/p/11398508.html
Copyright © 2011-2022 走看看