zoukankan      html  css  js  c++  java
  • Best Time to Buy and Sell Stock III

    Say you have an array for which the ith element is the price of a given stock on day i.

    Design an algorithm to find the maximum profit. You may complete at most two transactions.

    Note:
    You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).

    思路:

    将vector分成两部分,用Best Time to Buy and Sell Stock I的方法求得两部分的最大值,然后求和的最大值。要求两部分的最大值需要先正面扫描一遍求得0到i的最大值,在反方向扫描一遍求i到n-1的最大值。

    代码:

     1     int maxProfit(vector<int> &prices) {
     2         // IMPORTANT: Please reset any member data you declared, as
     3         // the same Solution instance will be reused for each test case.
     4         int n = prices.size();
     5         if(n == 0)
     6             return 0;
     7         vector<int> first(n, 0), second(n, 0);
     8         int min = prices[0], maxProfit = 0, max = prices[n-1];
     9         first[0] = 0;
    10         for(int i = 1; i < n; i++){
    11             if(prices[i] < min){
    12                 min = prices[i];
    13             }
    14             if(prices[i] - min > maxProfit){
    15                 maxProfit = prices[i] - min;
    16             }
    17             first[i] = maxProfit;
    18         }
    19         second[n-1] = 0;
    20         maxProfit = 0;
    21         for(int i = n-2; i >= 0; i--){
    22             if(prices[i] > max){
    23                 max = prices[i];
    24             }
    25             if(max - prices[i] > maxProfit){
    26                 maxProfit = max - prices[i];
    27             }
    28             second[i] = maxProfit;
    29         }
    30         maxProfit = first[0] + second[0];
    31         for(int i = 1; i < n; i++){
    32             if(first[i] + second[i] > maxProfit)
    33                 maxProfit = first[i] + second[i];
    34         }
    35         return maxProfit;
    36     }
  • 相关阅读:
    罗杨美慧 20180912-3 词频统计
    罗杨美慧 20190912-2 命令行
    罗杨美慧 20190905-1 每周例行报告
    罗杨美慧 20190905-2 博客作业
    20190919-4 测试,结对要求
    孙晓宇-20190912-1 每周例行报告
    孙晓宇-20180912-3 词频统计
    (第二周)孙晓宇20190912-2 命令行
    孙晓宇20190905-2 博客作业
    孙晓宇20190905-1 每周例行报告
  • 原文地址:https://www.cnblogs.com/waruzhi/p/3416252.html
Copyright © 2011-2022 走看看