leetcode之买卖股票的最好时机

题目描述

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

示例 1:

输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
     注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
示例 2:

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

提示:

1 <= prices.length <= 105
0 <= prices[i] <= 104

解题思路:

我一开始用的双指针,但是发现思路行不通,后来想不出来就用了一个双层循环,但可想而知会超时,最后看了题解,感觉顿时就明白了,主要运用到了动态规划。

题解中主要运用到了两个变量

一个当前股价的最小值:这个值的更新方法为很简单,一开始假设其值为列表的第一个元素,之后在遍历列表时,如果当前值小于它,就将当前值赋给它,这样购入最低股票的日期就永远在卖出股票日的前面了

一个是利润的最大值:初始值设为0,在遍历列表的时候,如果当前值-股价最低值大于此时的利润最大值,就将此值更新为该值

源码:

from typing import List

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        min_price = prices[0]  # 假设第一天的价格最低
        max_profit = 0  # 初始时最大利润设为0
        for cur_p in prices:
            max_profit = max(max_profit, cur_p - min_price) #当前利润=当天的价格-目前最低的价格 用当前利润和最大利润进行比较
            min_price = min(min_price, cur_p) #最低价格也要更新
            # print(f'{cur_p} {min_price} {max_profit}')

        return max_profit

通过截图:

 同步更新于个人博客系统:leetcode之买卖股票的最佳时机 

 同步更新于个人博客系统:leetcode之买卖股票的最佳时机 

同步更新于个人博客系统:leetcode之买卖股票的最佳时机 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值