当前位置: 首页 > news >正文

【代码随想录训练营】【Day 49+】【动态规划-8】| Leetcode 121, 122, 123

【代码随想录训练营】【Day 49+】【动态规划-8】| Leetcode 121, 122, 123

需强化知识点

  • 买卖股票系列

题目

121. 买卖股票的最佳时机

  • 动态规划
  • 贪心:记录左侧的最小值
class Solution:def maxProfit(self, prices: List[int]) -> int:# n = len(prices)# # 0 代表 不持有,1 代表 持有# dp = [[0]*2 for _ in range(n)]# dp[0][1] = - prices[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], -prices[i])# return dp[n-1][0]lowPrice = float('inf')result = 0 for i in range(0, len(prices)):lowPrice = min(lowPrice, prices[i])result = max(result, prices[i]-lowPrice)return result

122. 买卖股票的最佳时机 II

  • 注意 和 121的区别,在于第 i 天持有的时,dp[i-1][0]-prices[i] (121中默认dp[i-1][0]为0)
class Solution:def maxProfit(self, prices: List[int]) -> int:# 0 不持有, 1 持有dp = [[0]*2 for _ in range(len(prices))]dp[0][0] = 0dp[0][1] = -prices[0]for i in range(1, len(prices)):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[len(prices)-1][0]

123. 买卖股票的最佳时机 III

  • 代码随想录思路:0-4 五种状态
class Solution:def maxProfit(self, prices: List[int]) -> int:# 0 没有操作# 1 第一次持有股票# 2 第一次不持有股票# 3 第二次持有股票# 4 第二次不持有股票n = len(prices)dp = [[0]*5 for _ in range(n)]dp[0][1], dp[0][3] = -prices[0], -prices[0]for i in range(1, n):dp[i][1] = max(dp[i-1][1], dp[i-1][0]-prices[i])dp[i][2] = max(dp[i-1][2], dp[i-1][1]+prices[i])dp[i][3] = max(dp[i-1][3], dp[i-1][2]-prices[i])dp[i][4] = max(dp[i-1][4], dp[i-1][3]+prices[i])return dp[n-1][4]

相关文章:

  • C#使用OpenXml读取Word、PPT、Excel文档内容
  • linux pip 离线安装
  • 2024-6-10-zero shot,few shot以及无监督学习之间的关系是什么
  • NettyのBufferChannelSelector用法
  • 2024年春季学期《算法分析与设计》练习13
  • opencv中的图像操作
  • 端口占用多:UE4/UE5像素流送云推流时如何优化端口使用?
  • mac无法读取windows分区怎么办 苹果硬盘怎么读取
  • Android SDK版本号与API Level 的对应关系
  • ctfshow-web入门-命令执行(web53-web55)
  • 数据结构:手撕代码——顺序表
  • 【Java】解决Java报错:IllegalArgumentException
  • 【QT】记录一次QT程序发布exe过程
  • 硬盘几个关键指标你一定要知道!
  • 程序固化——FPGA学习笔记6
  • JavaScript-如何实现克隆(clone)函数
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【comparator, comparable】小总结
  • Android交互
  • conda常用的命令
  • dva中组件的懒加载
  • ESLint简单操作
  • export和import的用法总结
  • Just for fun——迅速写完快速排序
  • Linux下的乱码问题
  • MaxCompute访问TableStore(OTS) 数据
  • Python_OOP
  • Quartz初级教程
  • react-native 安卓真机环境搭建
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • SQLServer之创建显式事务
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 回顾2016
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 前端设计模式
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 使用parted解决大于2T的磁盘分区
  • 用简单代码看卷积组块发展
  • 数据可视化之下发图实践
  • 正则表达式-基础知识Review
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • #《AI中文版》V3 第 1 章 概述
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • #在 README.md 中生成项目目录结构
  • (42)STM32——LCD显示屏实验笔记
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (C语言)fread与fwrite详解
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)ssm码农论坛 毕业设计 231126
  • (含笔试题)深度解析数据在内存中的存储
  • (接口封装)
  • (论文阅读40-45)图像描述1
  • (译) 函数式 JS #1:简介
  • (译)2019年前端性能优化清单 — 下篇