力扣188. 买卖股票的最佳时机 IV

动态规划

  • 思路:
    • 状态定义
      • 假设 buy[i][j] 是第 i 天进行第 j 笔交易,手上还买入一支股票的最大利润;
      • sell[i][j] 是第 i 天进行第 j 笔交易的最大利润;
    • 状态转移:
      • 第 i 天进行第 j 笔交易,手上还买入一支股票:
        • 第 i - 1 天即为此状态,第 i 天未进行操作,即 buy[i - 1][j];
        • 第 i - 1 天进行第 j 笔交易,第 i 天买入,即 sell[i - 1][j] - prices[i];
        • 则 buy[i][j] = max(buy[i - 1][j], sell[i - 1][j] - prices[i]);
      • 第 i 天进行第 j 笔交易:
        • 第 i - 1 天进行了第 j 笔交易,第 i 天未进行操作,即 sell[i - 1][j];
        • 第 i - 1 天进行了第 j - 1 笔交易并且手上还持有一支股票,第 i 天进行卖出,即 buy[i - 1][j - 1] + prices[i];
        • 则 sell[i][j] = max(sell[i - 1][j], buy[i - 1][j - 1] + prices[i]);
    • 初始状态:
      • buy[0][0] = -prices[0]
      • sell[0][0] = 0
      • 初始化第 0 天第 0 - k 笔交易值为 INT_MIN / 2;

        buy[0][i] = INT_MIN / 2;

        sell[0][i] = INT_MIN / 2;

    • 最大交易次数为天数的一半,即 k = std::min(k, size / 2);
    • 第 0 笔交易的时候进行修正(避免 j - 1 溢出)

      buy[i][0] = std::max(buy[i - 1][0], sell[i - 1][0] - prices[i]);

    • 最大利润为最后一天完成交易的最大值:

      *std::max_element(sell[size - 1].begin(), sell[size - 1].end());

class Solution {
public:int maxProfit(int k, vector<int>& prices) {int size = prices.size();if (0 == size) {return 0;}k = std::min(k, size / 2);std::vector<std::vector<int>> buy(size, std::vector<int>(k + 1));std::vector<std::vector<int>> sell(size, std::vector<int>(k + 1));buy[0][0] = -prices[0];sell[0][0] = 0;for (int i = 1; i <= k; ++i) {buy[0][i] = INT_MIN / 2;sell[0][i] = INT_MIN / 2;}for (int i = 1; i < size; ++i) {buy[i][0] = std::max(buy[i - 1][0], sell[i - 1][0] - prices[i]);for (int j = 1; j <= k; ++j) {buy[i][j] = std::max(buy[i - 1][j], sell[i - 1][j] - prices[i]);sell[i][j] = std::max(sell[i - 1][j], buy[i - 1][j - 1] + prices[i]);}}return *std::max_element(sell[size - 1].begin(), sell[size - 1].end());}
};

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

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

相关文章

C语言PDF编程书籍下载

[C.Primer.Plus&#xff08;第6版&#xff09;中文版].&#xff08;美&#xff09;普拉达.扫描版.pdf 链接: https://pan.baidu.com/s/1difCyykkBdLqgLu32PgYLw 密码: tv05 C语言程序设计教程_基于Visual.Cpp.6.0环境.pdf 链接: https://pan.baidu.com/s/1q3nRrRJyUd4H3Yp_PgA…

【tensorflowflutter】自己写个机器学习模型用在项目上?

背景 拍摄APP项目上线有一阵了&#xff0c;每天的拍摄数据呈现波动上升状态、业务方需要对数据进行加工&#xff0c;如果能有对未来的数据量的预测就好了 。 目标 在端侧展示拍摄数据可视化趋势图等、并能推断数据&#xff08;选择预测日期&#xff09; 简单实现个demo gif背…

P1067 [NOIP2009 普及组] 多项式输出————C++

目录 [NOIP2009 普及组] 多项式输出题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示 解题思路Code运行结果 [NOIP2009 普及组] 多项式输出 题目描述 一元 n n n 次多项式可用如下的表达式表示&#xff1a; f ( x ) a n x n a …

Qt在linux系统上使用技巧

路径表示 Windows操作系统可用"\"或"/"表示路径&#xff0c;Unix操作系统用"/"表示路径。综合&#xff0c;qt最好用“/”表示路径。 第三方静态库和动态库 lib文件&#xff1a;&#xff08;依据编译器&#xff09; MSVC编译器是生成.lib 文件…

JAVA期末考试知识点总结

基础语法 在Java中&#xff0c;基本数据类型有以下几种&#xff1a;1.整数类型&#xff1a; 2.byte&#xff1a;占用 1 字节&#xff08;8 位&#xff09;&#xff0c;范围为 -128 到 127。 3.short&#xff1a;占用 2 字节&#xff08;16 位&#xff09;&#xff0c;范围为 -…

亚马逊实时 AI 编程助手 CodeWhisperer使用体验

文章目录 1&#xff1a;什么是CodeWhisperer &#xff1f;2&#xff1a;试用3&#xff1a;上手体验 1&#xff1a;什么是CodeWhisperer &#xff1f; 最近ChatGPT展现出强大AI能力给我们带来了深刻的影响&#xff0c;AI现在不是一个概念&#xff0c;基于AI的产品一定在各行各业…

实战AI大模型:AIGC及经典模型

今天&#xff0c;人工智能技术的快速发展和广泛应用已经引起了大众的关注和兴趣&#xff0c;它不仅成为技术发展的核心驱动力&#xff0c;更是推动着社会生活的全方位变革。特别是作为AI重要分支的深度学习&#xff0c;通过不断刷新的表现力已引领并定义了一场科技革命。大型深…

Linux服务器安装操作Nginx

1.下载nginx压缩包 //进入/usr/local目录创建一个文件夹 cd /usr/local mkdir nginx cd nginx //下载tar包 wget http://nginx.org/download/nginx-1.20.1.tar.gz 2.配置nginx安装所需的环境 1. 安装gcc 安装 nginx 需要先将官网下载的源码进行编译&#xff0c;编译依赖 gc…

网站如何创建百度地图显示地理位置

在做企业网站的时候&#xff0c;我们会放置一个地理位置&#xff0c;我们可以引用百度地图&#xff0c;来显示我们的店铺所在位置 效果演示&#xff1a; 操作步骤 1、打开百度地图https://map.baidu.com/&#xff0c;搜索输入地址 2、点击地址 3、会出现如下视图 4、点击分享…

Dijkstra算法——邻接矩阵实现+路径记录

本文是在下面这篇文章的基础上做了一些补充&#xff0c;增加了路径记录的功能。具体Dijkstra的实现过程可以参考下面的这篇文章。 [jarvan&#xff1a;Dijkstra算法详解 通俗易懂](Dijkstra算法详解 通俗易懂 - jarvan的文章 - 知乎 https://zhuanlan.zhihu.com/p/338414118) …

安卓adb

目录 如何开启 ADB 注意事项 如何使用 ADB ADB 能干什么 ADB&#xff08;Android Debug Bridge&#xff09;是一个多功能命令工具&#xff0c;它可以允许你与 Android 设备进行通信。它提供了多种设备权限&#xff0c;包括安装和调试应用&#xff0c;以及访问设备上未通过…

HarmonyOS应用开发者基础认证考试

判断题 1.Ability是系统调度应用的最小单元,是能够完成一个独立功能的组件。一个应用可以包含一个或多个Ability。 正确(True) 2.所有使用Component修饰的自定义组件都支持onPageShow,onBackPress和onPageHide生命周期函数。 错误(False) 3.每调用一次router.pushUrl()方法,…

Cocos Creator 3.8 开发2D水面波纹Shader

使用cocos Creator 3.8做了一个游戏开中常用的2D的波浪水面,把技术点给记录一下&#xff0c;并提供完整的Shader代码。先上效果: 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 2D 波浪的基本技术原理 2D 水面波纹的主要原理就是给定一个正选波的边界&…

基于 SpringBoot + magic-api + Vue3 + Element Plus + amis3.0 快速开发管理系统

Tansci-Boot 基于 SpringBoot2 magic-api Vue3 Element Plus amis3.0 快速开发管理系统 Tansci-Boot 是一个前后端分离后台管理系统&#xff0c; 前端集成 amis 低代码前端框架&#xff0c;后端集成 magic-api 的接口快速开发框架。包含基础权限、安全认证、以及常用的一…

2020年认证杯SPSSPRO杯数学建模D题(第二阶段)让电脑桌面飞起来全过程文档及程序

2020年认证杯SPSSPRO杯数学建模 D题 让电脑桌面飞起来 原题再现&#xff1a; 对于一些必须每天使用电脑工作的白领来说&#xff0c;电脑桌面有着非常特殊的意义&#xff0c;通常一些频繁使用或者比较重要的图标会一直保留在桌面上&#xff0c;但是随着时间的推移&#xff0c;…

搭建LNMP网站平台并部署Web应用

本章主要介绍&#xff1a; 安装Nginx安装MySQL安装PHP在LNMP平台中部署 Web 应用 构建LNMP网站平台就像构建LAMP平台一样&#xff0c;构建LNMP平台也需要Linux服务器&#xff0c;MySQL数据库&#xff0c;PHP解析环境&#xff0c;区别主要在Nginx 与 PHP的协作配置上&#xff0…

Spring 应用上下文探秘:生命周期解析与最佳实践

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Spring 应用上下文探秘&#xff1a;生命周期解析与最佳实践 前言应用上下文的初始化过程1. 应用上下文的初始化过程&#xff1a;2. 不同类型的 ApplicationContext 初始化流程&#xff1a;2.1 Annotat…

湖南大学-数据库系统-2018期末考试解析

【写在前面】 这是2018年的卷子&#xff0c;复习备考的时候做了并与同学校对了答案。答案仅供参考。这张难度不大&#xff0c;同样的&#xff0c;跟前几张差不了太多。但是从这一年开始&#xff0c;选择题变成了15道&#xff0c;越来越贴切近几年的考试了。 一、单选题&#xf…

HTML JavaScript 康威生命游戏

<!DOCTYPE html> <html> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>康威生命游戏</title><style>body {font-family: Arial, sa…

JS-基础语法(一)

JavaScript简单介绍 变量 常量 数据类型 类型转换 案例 1.JavaScript简单介绍 JavaScript 是什么&#xff1f; 是一种运行在客户端&#xff08;浏览器&#xff09;的编程语言&#xff0c;可以实现人机交互效果。 JS的作用 JavaScript的组成 JSECMAScript( 基础语法 )…