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

    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).

     
    设dpBack[i]为从第一天到第i天的最大的收益
    设dpAfter[j]为从第j天到最后一天的最大收益
     
    如何求最大收益可以考虑采用Best Time to Buy and Sell Stock I的方法
     
    注意是最多买两次,也可以只买一次
     
     1 class Solution {
     2 public:
     3     int maxProfit(vector<int> &prices) {
     4        
     5         int n=prices.size();
     6         if(n==0)return 0;
     7  
     8         vector<int> dpBack(n),dpAfter(n);
     9  
    10         int maxProfit=0;
    11         dpBack[0]=0;
    12         int left=prices[0];
    13        
    14         for(int i=1;i<n;i++)
    15         {
    16             if(prices[i]>left)
    17             {
    18                if(maxProfit<prices[i]-left) maxProfit=prices[i]-left;
    19             }
    20             else
    21             {
    22                 left=prices[i];
    23             }
    24            
    25             dpBack[i]=maxProfit;
    26         }
    27        
    28         maxProfit=0;
    29         dpAfter[n-1]=0;
    30         int right=prices[n-1];
    31        
    32         for(int j=n-2;j>=0;j--)
    33         {
    34             if(prices[j]<right)
    35             {
    36                 if(maxProfit<right-prices[j]) maxProfit=right-prices[j];
    37             }
    38             else
    39             {
    40                 right=prices[j];
    41             }
    42  
    43             dpAfter[j]=maxProfit;
    44         }
    45        
    46         int result=0;
    47         for(int i=0;i<n-1;i++)
    48         {
    49             if(dpBack[i]+dpAfter[i+1]>result) result=dpBack[i]+dpAfter[i+1];
    50            
    51             if(result<dpBack[i+1]) result=dpBack[i+1];
    52         }
    53        
    54         return result;
    55     }
    56 };
  • 相关阅读:
    二进制或者其他进制转为十进制
    十进制转为二进制或者其他进制
    0.1 + 0.2 !== 0.3
    [git]删除远程分支
    [git]一个本地仓库,多个远程仓库
    [git]用户名,邮箱
    npm install命令
    常用命令:查看端口
    std::lock_guard 与 std::unique_lock
    std::mutex
  • 原文地址:https://www.cnblogs.com/reachteam/p/4194631.html
Copyright © 2011-2022 走看看