LeetCode 算法题库【122】——买卖股票的最佳时机Ⅱ

买卖股票的最佳时机Ⅱ

题目描述:

ti
mu

解题思路:
  • 第一种:这个思路也是很简单的,我发现这里有个很神奇的地方,就是这里我们只需要把这个数组中的所有相邻元素的差值算出来,然后将这些元素中大于零的数的和求出来,这就是我们所需要的最大利润。原理也很简单,就是当你在算最大利润的时候,每次股票的利润都是卖出的那天价格减去买入的价格,因为我们不限制买卖股票的数量,那么我们就把只要是盈利的价格都加在一起,而盈利的价格就是上面所说的相邻元素差值中的大于零的数,说明这段区间就是盈利的,然后加在一起就很容易得到最大利润。
  • 时间复杂度:O(N) 。
class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        dic = []
        Sum = 0
        for i in range(1, len(prices)):
            dic.append(prices[i] - prices[i-1])
            if dic[i-1] > 0:
                Sum = Sum + dic[i-1]
            else:
                continue
        return Sum

1

  • 第二种:这里用到的方法也很厉害。从代码也很容易理解,就是我们只要发现第一天价格小于第二天价格,我们就在这天买入,然后第二天卖出。方法也很暴力。
  • 时间复杂度:O(N) 。
class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        Sum = 0
        for i in range(1, len(prices)):
            if prices[i-1] < prices[i]:
                Sum += prices[i] - prices[i-1]
        return Sum

2

  • 第三种:这里我看到了一位大佬的解法,觉得很厉害,于是就挂在这里收藏…,这里就1行代码确实厉害,但是我对这种写法并不是特别了解。大概的解法就是用zip()函数将pricesprices[i:]这两个数组中对应的元素打包成一个个元组,然后ab分别对应这些数组的各个位置元素,然后从头开始遍历,如果b > a,后面的元素大于前面的,也就是盈利,那么就把所有的这些盈利的值用sum()加起来,最后返回。
  • 时间复杂度:O(N) 。
class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        return sum(b - a for a, b in zip(prices, prices[1:]) if b > a)

3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值