<LeetCode天梯>Day004 买卖股票的最佳时机 II(DP动态规划法) | 初级算法 | Python

举报
府学路18号车神 发表于 2022/04/11 15:21:22 2022/04/11
【摘要】 今天依旧和车神哥一起来提升自己的Python编程和面试能力吧,刷天梯~以下为我的天梯积分规则:每日至少一题:一题积分+10分 若多做了一题,则当日积分+20分(+10+10)若做了三道以上,则从第三题开始算+20分(如:做了三道题则积分-10+10+20=40;做了四道题则积分–10+10+20+20=60)初始分为100分若差一天没做题,则扣积分-10分(周六、周日除外注:休息)坚持!!!...

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

以下为我的天梯积分规则

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


初始分为100分
若差一天没做题,则扣积分-10分(周六、周日除外注:休息
坚持!!!


初级算法

刷题目录

数组

在这里插入图片描述

题干

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

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

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

依旧还是这道题,我觉得题不适合做太快,一道题,多个思路,多重解法,同样会有很快的提升。

和上一篇的动态规划写法有所不同,但基本思想都是一致的。

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
	   if not prices:
	            return 0
	        n = len(prices)
	        dp = [[0]*2 for _ in range(n)]
	        # dp[i][0]表示第i天不持有股票,dp[i][1]表示第i天持有股票
	        dp[0][0], dp[0][1] = 0, -prices[0]  # 设置初始值,第一天不持有股票则设置为0,持有股票,则为负当日股票价格
	        for i in range(1, n):
	            dp[i][0] = max(dp[i-1][0], dp[i-1][1] + prices[i])  # 记录不持有股票的价格
	            dp[i][1] = max(dp[i-1][1], dp[i-1][0] - prices[i])  # 记录持有股票手里的钱
	            
	        return dp[n-1][0]  # 输出最后一天不持有股票,也就是说已经卖完了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
虽然效果不是很好,但是结果是很准确的。

鱼与熊掌不能兼得呀~

再次祝大家1024节日快乐~

Reference


今日得分:+10
总得分:140(更新算法方法-2021.10.24加10分)

加油!!!

❤坚持读Paper,坚持做笔记,坚持学习❤!!!
再加个坚持刷题!!!打天梯!!!
To Be No.1

⚡⚡


创作不易⚡,过路能❤关注收藏点个赞三连就最好不过了

ღ( ´・ᴗ・` )


逆着光行走,任风吹雨打。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。