leetCode之买卖股票的最佳时机 II的贪心算法小问题

leetCode之买卖股票的最佳时机 II


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

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

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

示例 1:

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

示例 2:

输入: [1,2,3,4,5]
输出: 4
解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
     注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。
     因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。

示例 3:

输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。

思考过程:

  1. 直观地处理数据,用正常的思维去处理数据,即如何实现利益最大化,但是在不同的数组下,利益的最大化的求解方式貌似都有所不同。(比较复杂了~)
  2. 想要将正常的思维转换为计算机语言,也同样行不通(~)
  3. 对于交易一定是低卖高卖的,但,你能一元买进,明天是5元抛出的话,你是抛出还是不抛出,倘若你要抛出,但后天的价钱是10块呢?
  4. 在思考过于复杂混乱,决定寻求帮助,网上也很多的解答,即为”贪心算法“,有赚的我就买卖,-》百度关于贪心算法的解读,但是我发现贪心算法虽然在这个题目里是有一定道理的,在对于【1,2,3,4,5,6,7】这样的情况下,对于网上一些解答,仅仅用贪心算法的话,我们第一天1块买进,第二天有的赚,卖!第三天买,第四天又有赚,卖!最后并不是最优解答;在这里插入图片描述但也有人用折线图来解释,我觉得是很好的理解方式,这张图不是很好,大家可以自己做一下图。我们只要或得一条折线的低端和顶端便可以得到利润,但对于红线来说,我们写贪心算法是可行的,但是并不能这样去解释,实际上此时的贪心算法,当天卖了依然可以买,便可以实现利润最大化。