代码随想录 Day - 50|#123 买卖股票的最佳时机 III|#188 买卖股票的最佳时机 IV

清单

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

LeetCode #123 买卖股票的最佳时机 III

1. 题目

给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

2. 思路

  1. dp数组含义: 最多完成两笔交易,共存在五种状态 1.不交易 2. 第一次买入 3. 第一次卖出 4. 第二次买入 5. 第二次卖出 dp[i][j] 为第i天所能获取的最大利润, i 代表天数 j代表交易状态
  2. 递推公式:
    1. 若i天均不操作: dp[i][0] = dp[i-1][0]
    2. 若i天第一次买入: dp[i][1] = max(dp[i-1][1] #前一天已买入, dp[i-1][0] - prices[i] # i 天买入
    3. 第i天第一次卖出: dp[i][2] = max(dp[i-1][2] #前一天已卖出, dp[i-1][1] + prices[i] # i 天卖出
    4. 若i天第二次买入: dp[i][3] = max(dp[i-1][3] #前一天已买入, dp[i-1][2] - prices[i] # i 天买入
    5. 第i天第二次卖出: dp[i][4] = max(dp[i-1][4] #前一天已卖出, dp[i-1][3] + prices[i] # i 天卖出
  3. 初始化: dp[0][1] = - prices[i] dp[0][3] = - prices[i]
  4. 遍历顺序: 正向遍历

3. 代码实现

class Solution:def maxProfit(self, prices: List[int]) -> int:dp = [[0] * 5 for _ in range(len(prices))]dp[0][1] = - prices[0]dp[0][3] = - prices[0]for i in range(1,len(prices)):dp[i][0] = dp[i-1][0] # 不操作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[-1][4]

LeetCode #188 买卖股票的最佳时机 IV

1. 题目

给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

2. 思路

思路同上一题一样,共存在2k+1种状态 0为不操作,奇数为买入,偶数为卖出

3. 代码实现

class Solution:def maxProfit(self, k: int, prices: List[int]) -> int:dp = [[0] * ( 2 * k + 1) for _ in range(len(prices))]for i in range(1, 2 * k, 2):dp[0][i] = - prices[0]for i in range(1, len(prices)):for j in range(0, 2*k - 1, 2):dp[i][j+1] = max(dp[i-1][j+1], dp[i-1][j] - prices[i])dp[i][j+2] = max(dp[i-1][j+2], dp[i-1][j+1] + prices[i])return dp[-1][2*k]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/88962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅谈软件测试面试一些常见的问题

一、简历及岗位匹配度 说到简历,其实这一点是很重要但又被很多职场小白忽视的问题。经常有人说我投了很多简历,但是没有公司给我打电话,怎么办? 首先,应该明白的一点:面对求职市场的激烈竞争性&#xff0…

RFID技术引领汽车零部件加工新时代

RFID技术的兴起引领了汽车零部件加工领域的新时代,作为一种利用无线电频率进行自动识别的技术,RFID技术能够快速、准确地识别物体并获取相关数据,在汽车零部件加工中,RFID技术具有重要的应用价值,可以提高生产效率、降…

C++ Primer 类和对象(3)

类和结构体是比较相似,而传统的C的结构体中都是一些数据的类型,类除了有数据之外还有函数。所以可以把类想象成一个具有既有数据又有函数的复合数据类型。 类是一种将抽象转换为用户定义类型的C工具,它将数据表示和操纵数据的方法组合成一个整…

网络安全复习大纲wcf

单选10判断10填空30简答25分析25 选择 (1)计算机网络安全是指利用计算机网络管理控制和技术措施,保证在网络环境中数据的( )、完整性、网络服务可用性和可审查性受到保护。 A、保密性 B、抗攻击性 C、网络服务管理性 …

vite跨域proxy设置与开发、生产环境的接口配置,接口在生产环境下,还能使用proxy代理地址吗

文章目录 vite的proxy开发环境设置如果后端没有提供可以替换的/mis等可替换的后缀的处理办法接口如何区分.env.development开发和.env.production生产环境接口在生产环境下,还能使用proxy代理地址吗? vite的proxy开发环境设置 环境: vite 4…

如何使用virtualenv的虚拟环境

要使用virtualenv创建和管理虚拟环境,可以按照以下步骤: 安装virtualenv:如果你的系统上还没有安装virtualenv,可以使用以下命令安装: pip install virtualenv创建虚拟环境:在命令行中,进入你…

c++图像的边缘检测

图像的边缘检测 cv::Canny 是 OpenCV 中用于进行边缘检测的函数,特别是用于检测图像中的边缘。Canny 边缘检测是一种广泛使用的技术,它能够识别图像中的边缘,这些边缘通常表示对象之间的边界或图像中的显著特征 void cv::Canny(const cv::M…

网安新战场:CTF的那些事儿

CTF CTF的前世今生CTF竞赛中的挑战和难题CTF竞赛必备知识CTF竞赛中的技巧与策略: 写在末尾 主页传送门:📀 传送 CTF的前世今生 CTF(Capture The Flag)是一种网络安全竞赛,旨在测试参与者解决各种网络安全问…

HTML中Input elements should have autocomplete attributes的解决方案

kwfwservice.php:1 [DOM] Input elements should have autocomplete attributes (suggested: “current-password”): (More info: https://goo.gl/9p2vKq) <input name"password" id"password" lay-verify"required" placeholder"密码&…

AI赋能的3D资产管理

推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 想象一下&#xff0c;作为一名视频游戏设计师&#xff0c;你希望在游戏中使用 3D 龙模型。 以前&#xff0c;你可以通过两种方式执行此操作&#xff1a; 自己制作复杂的 3D 模型或从多个角度拍摄龙模型的照片。前往 3D 模…

Git_03_暂存工作区的修改/自由切换分支

# 保存当前未commit的代码 > git stash # 保存当前未commit的代码并添加备注 > git stash "备注内容" # 列出stash的所有记录 > git stash list # 应用最近一次的stash > git stash apply # 删除stash的所有记录 > git stash clear1.查看工作区的改动…

敏捷发布列车初探3 ---- Agile Release Train

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 敏捷发布列车四、联通客户五、规划工作五、创造价值六、获取反馈七、持续改进总结 敏捷发布列车 敏捷发布列车&#xff08;ART&#xff09; 是一个由敏捷团队组成的…

5+铜死亡+单基因泛癌生信思路

今天给同学们分享一篇铜死亡单基因泛癌的生信文章“Pan-cancer integrated bioinformatics analysis reveals cuproptosis related gene FDX1 is a potential prognostic and immunotherapeutic biomarker for lower-grade gliomas”&#xff0c;这篇文章于2023年2月7日发表在F…

Spring 学习(九)整合 Mybatis

1. 整合 Mybatis 步骤 导入相关 jar 包 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency>…

PASCAL数据集说明

文章目录 一.PASCAL数据集简介1.图像分割 一.PASCAL数据集简介 Pascal VOC2012数据集主要是针对视觉任务中监督学习提供标签数据&#xff0c;它有四个大类别&#xff0c;可以细分为二十个小类别&#xff1a; Person&#xff1a;personAnimal&#xff1a;bird, cat, cow, dog,…

9月25日,每日信息差

今天是2023年9月27日&#xff0c;以下是为您准备的18条信息差 第一、苹果向法国监管机构提交iPhone 12软件更新&#xff0c;解决辐射超标问题 第二、“双节”期间&#xff0c;北京全市预计接待游客1283万人次&#xff0c;中秋国庆“双节”长假将至&#xff0c;北京市民和游客…

Appium+python+unittest搭建UI自动化框架

阅读本小节&#xff0c;需要读者具备如下前提条件&#xff1a; 掌握一种编程语言基础&#xff0c;如java、python等。 掌握一种单元测试框架&#xff0c;如java语言的testng框架、python的unittest框架。 掌握目前主流的UI测试框架&#xff0c;移动端APP测试框架Appium&…

list 模拟与用法

list 用法 list list 模拟 #pragma once #include <assert.h> #include "ReverseIterator.h"namespace sjy {//链表节点template <typename T>struct __list_node{__list_node(const T& val T()):_prev(nullptr), _next(nullptr), _val(val){}/*…

xcode15下载ios17模拟器失败

升级到xcode15后需要安装ios17模拟器 但是在下载过程中会遇到报错 如下图这种 网上搜索了一下发现有人遇到过无法下载的问题&#xff0c;并且在apple官网也有人提出类似问题 https://developer.apple.com/forums/thread/737648 解决方案就是从https://developer.apple.com/do…

【iOS】使用respondsToSelector方法前是否需要对方法调用者进行判空操作?

前情 在iOS开发中&#xff0c;经常需要将事件传递给上层代理去处理&#xff0c;这个时候会用到『respondsToSelector』去检测上层代理是否有实现对应的方法&#xff0c;如果实现了&#xff0c;才会去调用。 - (void)methodExample {if ([self.delegate respondsToSelector:se…