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
  • 相关阅读:
    【2-26】string/math/datetime类的定义及其应用
    聚合函数,数学函数,字符串函数,时间日期函数
    数据库备份,还原,分离与附加
    SQL数据库增删改查
    form表单验证和事件、正则表达式
    悬浮动态分层导航
    图片轮播
    marquee标签
    Window.document对象
    Window.document对象
  • 原文地址:https://www.cnblogs.com/mr-stn/p/9201827.html
Copyright © 2011-2022 走看看