<LeetCode天梯>Day002 买卖股票的最佳时机 II | 初级算法 | Python

简介: <LeetCode天梯>Day002 买卖股票的最佳时机 II | 初级算法 | Python

从今天开始和车神哥一起来提升自己的Python编程和面试能力吧,刷天梯~


以下为我的天梯积分规则:


每日至少一题:一题积分+10分

若多做了一题,则当日积分+20分(+10+10)

若做了三道以上,则从第三题开始算+20分(如:做了三道题则积分-10+10+20=40;做了四道题则积分–10+10+20+20=60)


初始分为100分

若差一天没做题,则扣积分-10分(周六、周日除外注:休息)

坚持!!!


初级算法

刷题目录

数组


image.png

image.png

题干

给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。


设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。


注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。


示例1:


输入: prices = [7,1,5,3,6,4]

输出: 7

解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。

随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。


示例2:


输入: prices = [1,2,3,4,5]

输出: 4

解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。

注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。


示例3:


输入: prices = [7,6,4,3,1]

输出: 0

解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。


分析:


从题干来看,我们不知道Prices数组里面的价格是什么,也不知道哪一天需要购买哪一天需要卖出,但是我们知道索引号 i 代表天数,如果当第一天的价格很大时,那么不适合买入。等等,看示例的意思是我们可以通过遍历来知道哪一天的价格是最高和最低,貌似题干和现实是两码事,好!那么咱说干就干。

首先,先按索引号从小到大进行寻找,找到最大的价格那天和最小的那天,再进行判断,如果高价在前就不买入,低价在前就买入,先进行此策略购买。

策略二,如果价格区间很大,则在低价时买入,遇到高价则卖出,再遇到再买,然后再卖出。

策略三,遍历每一个数,前后计算出差值,如果后面的比前面小,则继续计算差值,然后再将其利润相加。


先试下代码:

# 2021.10.20 晚 没调出来

更新日志:2021.10.20 由于近日项目较多,测试了下写的 算法,还是有问题,明日再搞搞看了,害~


上面代码先空着,感觉思路不是很对,于是想到了动态规划来解决此问题。


当天交易完之后手里没有股票可能有两种情况,一种是当天没有进行任何交易,又因为当天手里没有股票,所以当天没有股票的利润只能取前一天手里没有股票的利润。一种是把当天手里的股票给卖了,既然能卖,说明手里是有股票的,所以这个时候当天没有股票的利润要取前一天手里有股票的利润加上当天股票能卖的价格。


当然这个算法还是有一点复杂,然后又想到了另外一个贪心算法,借用下图


image.png

所以就可以写成下面这样:


image.png

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        if not prices:
            return 0
        profits = 0
        n = len(prices)
        for id in range(n-1):
            temp = prices[id+1]-prices[id]
            if temp > 0:
                profits += temp
        return profits

image.png

image.png

image.png

上面是不感觉还有点多,其实也就一行,再来一遍:

return sum([prices[i+1]-prices[i] for i in range(len(prices)-1) if prices[i+1]-prices[i] > 0])

image.png

image.png

image.png

更新日志:2021.10.21 晚 贪心算法优化

相关文章
|
3天前
|
机器学习/深度学习 人工智能 算法
中草药识别系统Python+深度学习人工智能+TensorFlow+卷积神经网络算法模型
中草药识别系统Python+深度学习人工智能+TensorFlow+卷积神经网络算法模型
22 0
|
4天前
|
机器学习/深度学习 Web App开发 算法
Python 机器学习算法交易实用指南(一)(5)
Python 机器学习算法交易实用指南(一)
11 2
|
4天前
|
传感器 机器学习/深度学习 存储
Python 机器学习算法交易实用指南(一)(4)
Python 机器学习算法交易实用指南(一)
15 4
|
4天前
|
机器学习/深度学习 算法 API
Python 机器学习算法交易实用指南(一)(3)
Python 机器学习算法交易实用指南(一)
15 4
|
4天前
|
机器学习/深度学习 存储 算法
Python 机器学习算法交易实用指南(一)(2)
Python 机器学习算法交易实用指南(一)
10 2
|
4天前
|
机器学习/深度学习 算法 数据挖掘
Python 机器学习算法交易实用指南(一)(1)
Python 机器学习算法交易实用指南(一)
12 4
|
4天前
|
机器学习/深度学习 存储 分布式计算
Python 机器学习算法交易实用指南(五)(5)
Python 机器学习算法交易实用指南(五)
11 2
|
3天前
|
存储 索引 Python
元组(Tuple)在Python编程中的应用与实例
元组(Tuple)在Python编程中的应用与实例
12 2
|
3天前
|
机器学习/深度学习 数据可视化 数据挖掘
Python编程的深入探索与实用案例
Python编程的深入探索与实用案例
12 3