LeetCode:剑指 Offer 63. 股票的最大利润

题目:

假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?

限制:0 <= 数组长度 <= 10^5

解题思路:

  • 首先肯定是一如既往的暴力模拟枚举,不过这道题暴力的过程中会发现有很重复计算,即去后面的数组里面寻找最大值,来计算最大的利润
  • 所以就想到了直接创建一个数组temp,temp[i]表示从下标i开始的最大值,然后如果最大值比自己大,计算最大差距,ans存储最大差距。若比自己小则直接跳过。

代码:

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        # 计算一个数组temp,temp[i]表示从下标i开始的最大值
        # 然后如果最大值比自己大,计算最大差距,ans存储最大差距。
        # 若比自己小则直接跳过
        n = len(prices)
        if n == 0 :
            return 0
        temp = [0] * n
        max_temp = prices[n-1]
        for i in range(n-1, -1, -1) :
            if max_temp < prices[i] :
                temp[i] = prices[i]
                max_temp = prices[i]
            else :
                temp[i] = max_temp
        
        ans = 0
        for i in range(n) :
            # 后面的最大值还小于自己本身,则后面相对来说都是下降,最大利润记为0
            if temp[i] < prices[i] :
               continue
            else :
                ans_temp = temp[i] - prices[i]
                if ans < ans_temp :
                    ans = ans_temp 
        return ans

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值