zoukankan      html  css  js  c++  java
  • leetcode 188. 买卖股票的最佳时机 IV

    给定一个数组,它的第 i 个元素是一支给定的股票在第 天的价格。

    设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。

    注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

    示例 1:

    输入: [2,4,1], k = 2
    输出: 2
    解释: 在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2 。
    

    示例 2:

    输入: [3,2,6,5,0,3], k = 2
    输出: 7
    解释: 在第 2 天 (股票价格 = 2) 的时候买入,在第 3 天 (股票价格 = 6) 的时候卖出, 这笔交易所能获得利润 = 6-2 = 4 。
         随后,在第 5 天 (股票价格 = 0) 的时候买入,在第 6 天 (股票价格 = 3) 的时候卖出, 这笔交易所能获得利润 = 3-0 = 3 。

     1 #include<cmath>
     2 class Solution {
     3 public:
     4     int maxProfit(int k, vector<int> &prices) {
     5         int len = prices.size(), ans=0;
     6         if (k>len/2){
     7             for (int i=1; i<len; ++i)
     8                 ans += max(prices[i] - prices[i-1],0);
     9             return ans;
    10         }
    11         vector<int> buy(k+1, -99999999), sale(k+1, 0);
    12         for(int i=0; i<prices.size(); i++){
    13             for(int j=k; j>0; j--){
    14                 sale[j] = max(sale[j], buy[j]+prices[i]);
    15                 buy[j] = max(buy[j], sale[j-1]-prices[i]);
    16             }
    17         }
    18         return sale[k];
    19         
    20     }
    21 };
    有疑惑或者更好的解决方法的朋友,可以联系我,大家一起探讨。qq:1546431565
  • 相关阅读:
    <LinkedList> 61
    <LinkedList> (hard + 高)25
    <DP> (高频)322
    <BackTracking> (dfs hard) 291
    <Tree> (高频)236
    <Math> 29 365
    <String> 161 358
    <Array> 309 (高)334
    <Array> 54 (高频+hard )45
    <Design> 359 346
  • 原文地址:https://www.cnblogs.com/mr-stn/p/9201827.html
Copyright © 2011-2022 走看看