122. 买卖股票的最佳时机 II

本题题意主要是,在一只股票的N天价格中,通过不限次数的交易,求得最大利润。
相当于T121的简单进阶版

我最开始的思路是:

初始买入日为第一天,利润和设置为0

  1. 如果今天比买入那天股价高,则考虑明天的股价
    1.1 如果明天的股价更高,则不卖
    1.2 如果明天的股价不更高,则卖,总利润 += (今天价格-买入那天的价格),然后把买入价格设置为明天
  2. 如果今天比买入那天低,则把买入日设置为今天
  3. 如果今天跟买入那天的股价一样,则不处理pass
class Solution:
	def maxProfit(self, prices: List[int]) -> int:
		max_profit = 0
		min_index = 0
		for i in range(len(prices)):
			if prices[i] < prices[min_index]:
				min_index = i
			elif prices[i] > prices[min_index]:
				if i+1 < len(prices) and prices[i] < prices[i+1]:
					continue
				else:
					max_profit = max_profit + (prices[i] - prices[min_index])
					min_index = i + 1
		return max_profit

提交以后看了一下题解,有一个更好的方法,其实本题可以抽象为求所有递增子序列的(max-min)的总和,由于不限交易次数,所以只要后一天大于前一天,可以直接用后一天减前一天。
(以下代码来自LeetCode中文网52s的解)

class Solution:
    def maxProfit(self, prices):
        l=len(prices)
        if l<2:
            return 0
        s=0
        for i in range(0,l-1):
            m=prices[i+1]-prices[i]
            if m>0:
                s+=m
        return s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值