Best Time to buy && sell stock

该博客讨论了如何在给定股票价格数组中找到最佳的买卖时机以最大化利润。作者使用动态规划策略,分别从左右两端填充两个数组,记录在每个点进行交易可能获得的最大利润,最终通过遍历找到最多两次交易的最大收益。文章还涵盖了特殊情况的处理,例如所有价格相同的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

买卖一次

1个变量记录目前已知最便宜,(当前 - 已知最便宜)= 当前最大收益

买卖无数次 https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii

特殊值的处理,如果全部一样的话,其实可以直接initiate peak && valley = prices[0], 这样对于总体的profit是没有变化的~

t1 < t2 < t3:

buy t1, sell t2 && buy t2 && t3 = buuy t1 && sell t2

这就是得到valley && peak方法的逻辑

profit = Sum (peak - valley)

最多两次

DP

分别用array来记录按照中间某个断点,左右分别可能的最大profit,有一种edge case是只需要一次交易,所以需要最后再多扫描一次

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        
        # Edge case
        if prices is None or len(prices) <= 1:
            return 0
        
        # Divide && Counter
        left_profits = [0] * len(prices)
        left_profits[0] = 0
        
        right_profits = [0] * len(prices)
        right_profits[len(prices) - 1] = 0
        
        # Populate left_profits
        i = 1
        low = prices[0]
        profit = 0
        while (i < len(prices)):
            if prices[i] - low > profit:
                profit = prices[i] - low
            left_profits[i] = profit
            
            # Update knwon low price
            if prices[i] < low:
                low = prices[i]
            
            i = i + 1
            
        # Populate right_profits
        i = len(prices) - 2
        hi = prices[i + 1]
        profit = 0
        while i >= 0:
            if hi - prices[i] > profit:
                profit = hi - prices[i]
            right_profits[i] = profit
            
            # Update known hi price
            if prices[i] > hi:
                hi = prices[i]
            
            i = i - 1
        
        # 3rd pass && get what is the overall best price
        ret_profit = 0
        
        # If has to conduct 2 transactions
        for i in range(0, len(prices) - 1):
            ret_profit = max(ret_profit, left_profits[i] + right_profits[i + 1])
        
        # Edge case is it might just need 1 transaction
        for i in range(0, len(prices)):
            ret_profit = max(ret_profit, max(left_profits[i], right_profits[i]))
        
        return ret_profit
        

 

python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明),含有代码注释,新手也可看懂,个人手打98分项目,导师非常认可的高分项目,毕业设计、期末大作业和课程设计高分必看,下载下来,简单部署,就可以使用。该项目可以直接作为毕设、期末大作业使用,代码都在里面,系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值,项目都经过严格调试,确保可以运行! python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实现mysql数据库(源码+文档说明)python基于django框架仓库管理系统设计与实
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值