当前位置:   article > 正文

leetcode每日一题——122.买卖股票的最佳时机II(面试经典150题)_买卖股票的最佳时机 ii

买卖股票的最佳时机 ii

一、题目描述与要求

122. 买卖股票的最佳时机 II - 力扣(LeetCode)

题目描述

给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。

在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。

返回 你能获得的 最大 利润 

示例

示例1:

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

示例2:

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

示例3:

  1. 输入:prices = [7,6,4,3,1]
  2. 输出:0
  3. 解释:在这种情况下, 交易无法获得正利润,所以不参与交易可以获得最大利润,最大利润为 0

提示

  • 1 <= prices.length <= 3 * 104
  • 0 <= prices[i] <= 104

二、解题思路

总的思路:

        先分析题目可知,题目要求我们根据价格数组,找到最合适的买入时间与卖出时间,从而使得利润最大。因而可以利用贪心算法来实现。也就是我们要找出最小的买入价格与对应所能达到的最高利润。

       首先,我们可以先思考什么时候我们必须要卖出去呢?那就是当你发现第二天价格要降低的时候马上卖出去,又或者是已经是最后一天了,就必须要卖出去。因而我们可以设置卖出条件为price[i]>price[i+1](i<pricesSize)或者i==pricesSize-1。只要触发这个条件我们就卖出。这时候我们就要判断是否达到了最大利润,用此时的价格减去买入的价格,也就是minPrice,如果是负数那就不需要更新maxPrice,因为这一操作没法得到正利润,所以不更新就相当于不参与交易。如果结果是正的,则更新maxPrice最大利润。然后再更新对应的minPrice,将其设置为当天卖出的价格,接着对数组剩下的部分进行判断是否进行交易。【这里就体现除了贪心算法中局部最优解。贪心算法是获得局部最优解然后再合并成整体的解(对于整体来说不一定是最优的)】

       然后对于买入时间,那就是先将第一天的价格设置为最小价格,然后在遍历数组的过程中如果发现比当前最小价格更小的价格,并且未卖出,则对其进行更新。最后返回最大利润即可。

具体步骤:

①定义初始最大利润与初始最低价

②遍历数组,判断是否将股票卖出,如果需要卖出,更新对应的maxPrice以及minPrice

③判断minPrice是否需要更新

④返回maxPrice


三、具体代码【C语言】

  1. int maxProfit(int* prices, int pricesSize){
  2. //贪心算法
  3. int maxProfit = 0;//最大利润
  4. int minPrice =prices[0];//最低价——用来买入股票
  5. int i;
  6. for(i=1; i< pricesSize; i++)
  7. {
  8. //发现后一天的价格更便宜或者已经是最后一天了 这时候就必须要卖出
  9. if(((i < pricesSize-1) && (prices[i] > prices[i+1])) || (i==pricesSize-1))
  10. {
  11. if(prices[i]- minPrice > 0)//不是负盈利才能计算最大利润
  12. maxProfit += prices[i]- minPrice;
  13. //更新最低价
  14. minPrice = prices[i];//卖出股票后更新最低价为当天售价
  15. }
  16. //如果找到了更低价的价格,则更新最低价(买入价格) 因而可以实现在最低价买入
  17. if(minPrice > prices[i])
  18. minPrice = prices[i];
  19. }
  20. return maxProfit;
  21. }

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号