<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月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
51 0
|
2月前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
|
5月前
|
算法
测试工程师的技能升级:LeetCode算法挑战与职业成长
这篇文章通过作者亲身体验LeetCode算法题的过程,探讨了测试工程师学习算法的重要性,并强调了算法技能对于测试职业成长的必要性。
91 1
测试工程师的技能升级:LeetCode算法挑战与职业成长
|
4月前
|
数据挖掘 Python
用python的tushare模块分析股票案例(python3经典编程案例)
该文章提供了使用Python的tushare模块分析股票数据的案例,展示了如何获取股票数据以及进行基本的数据分析。
202 0
|
5月前
|
数据采集 数据可视化 索引
【python】python股票量化交易策略分析可视化(源码+数据集+论文)【独一无二】
【python】python股票量化交易策略分析可视化(源码+数据集+论文)【独一无二】
418 1
|
4月前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现智能股票交易策略
使用Python实现智能股票交易策略
101 0
|
5月前
|
机器学习/深度学习 数据可视化 API
【python】python基于tushare股票数据分析可视化(源码+数据+报告)【独一无二】
【python】python基于tushare股票数据分析可视化(源码+数据+报告)【独一无二】
437 1
|
5月前
|
算法
leetcode188 买卖股票的最佳时机IV
leetcode188 买卖股票的最佳时机IV
73 0
|
5月前
|
数据采集 数据可视化 数据挖掘
【python】python可口可乐股票历史数据分析与可视化(源码+数据集+论文)【独一无二】
【python】python可口可乐股票历史数据分析与可视化(源码+数据集+论文)【独一无二】
|
4月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行