代码随想录刷题第50天

继续炒股。第一题是买卖股票的最佳时机IIIhttps://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iii/description/,与上题不同的是,本题要求买卖的次数要限制在2次以内。对上题的dp数组,显然要增加它的状态以适应题目要求。对于遍历的每一天,一共的状态数有5种:第一次持有股票,第一次不持有股票,第二次持有股票,第二次不持有股票,对应的状态j为1、2、3、4。dp[i][j] 为第i天状态为j是获得的最大利润。j = 1时,第一次持有股票,可能第i天刚刚买入,dp[i][1] = - prices[i];也可能延续了第i-1天的持有状态,dp[i][1] = dp[i - 1][1]。综上dp[i ][1] = max(dp[i - 1 ][1],  - prices[i]。j=2时,第一次不持有股票,可能第i天刚刚卖出,dp[i][2] = dp[ i - 1 ][1] + prices[i];也可能延续了第i-1天的不持有状态,dp[i][2] = dp[ i - 1 ][2]。dp[i][2] = max(dp[ i - 1 ][1] + prices[i], dp[i - 1][2])。同理可以分析出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])。dp[0][1]对应着第一天买入的操作,dp[0][1] = - prices[0]。dp[0][2]对应第一天买入又卖出的情况,dp[0][2] = 0。dp[0][3] 对应二次买入的操作,dp[0][3] = dp[0][1]。dp[0][4]对应二次买入卖出的情况,dp[0][4] = dp[0][2]。从前向后遍历dp数组,最后返回dp[prices.size() - 1][4]。

class Solution {
public:int maxProfit(vector<int>& prices) {if (prices.size() == 0) return 0;vector<vector<int>> dp(prices.size(), vector<int> (5, 0));dp[0][1] = -prices[0];dp[0][3] = -prices[0];for (int i = 1; i < prices.size(); i++){dp[i][1] = max(dp[i - 1][1], -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[prices.size() - 1][4];}
};

第二题是买卖股票的最佳时机IVhttps://leetcode.cn/problems/best-time-to-buy-and-sell-stock-iv/description/,本题是上一题的抽象化,当买卖k次时,对应遍历的每一天,都有2k种状态,对应着第一次持有/不持有,直到第k次持有/不持有。建立一个大小为prices.size() * 2k+1大小的二维dp数组,递推公式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])。将奇数下标的dp值初始化为-prices[i]。从前向后遍历dp数组。

class Solution {
public:int maxProfit(int k, vector<int>& prices) {if (prices.size() == 0) return 0;vector<vector<int>> dp(prices.size(), vector<int> (2*k+1, 0));for (int i = 1; i < 2*k; i += 2){dp[0][i] = -prices[0];}for (int i = 1; i < prices.size(); i++){for (int j = 0; j < 2*k - 1; j += 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[prices.size() - 1][2*k];}
};

还有十天通关,加油!!

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

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

相关文章

好书推荐丨细说PyTorch深度学习:理论、算法、模型与编程实现

文章目录 写在前面深度学习推荐图书内容简介作者简介 推荐理由粉丝福利写在最后 写在前面 本期博主给大家推荐一本深度学习的全新正版书籍&#xff0c;感兴趣的小伙伴快来看看吧~ 深度学习 深度学习是机器学习的一个分支&#xff0c;它模仿人脑神经网络的工作原理进行复杂的…

linux使用anaconda服务

另一篇可以结合使用&#xff1a;python-miniconda安装及使用注意 安装 去 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/?CN&OD wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-5.3.1-Linux-x86_64.sh(这里选择浏览器下载&#xff…

蓝桥杯练习系统(算法训练)ALGO-986 藏匿的刺客

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 强大的kAc建立了强大的帝国&#xff0c;但人民深受其学霸及23文化的压迫&#xff0c;于是勇敢的鹏决心反抗。   kAc帝国防…

linux kernel物理内存概述(二)

目录 物理内存数据结构 设备数物理内存描述 物理内存映射 map_kernel map_mem zone数据结构 zone类型 物理内存数据结构 站在处理器角度&#xff0c;管理物理内存的最小单位是页面。使用page数据结构描述&#xff0c;通常默认大小4kB&#xff0c;采用mem_map[]数组来存…

学习java第一天(下载并配置环境+写第一个java程序)

一.安装 1.下载 直接去官网上选择与你电脑符合的版本下载 官网链接Java Archive Downloads - Java SE 8u211 and later &#xff08;拿我的为例 Windows x64版本&#xff09; ​ 2.然后安装好exe&#xff08;要让自己知道在哪&#xff09; 3.配置环境 大佬链接&#xff1…

“每一次的感应,都是对环境的温柔拥抱。”#STM32项目二 《感应开关盖垃圾桶》【上】

“每一次的感应&#xff0c;都是对环境的温柔拥抱。”#STM32项目二 《感应开关盖垃圾桶》【上】 前言预备知识1.定时器介绍11.1软件延时的优缺点1.2定时器工作原理1.3定时器的分类1.4 STM32F103C8T6定时器资源1.5通用定时器介绍 2.定时器介绍22.1定时器计数模式2.2定时器时钟源…

实战:从Oracle standby数据库端备份数据库并在异机恢复一个新的数据库

导读 为减少主库的备份压力&#xff0c;在standby备库备份数据库&#xff0c;由于测试需要&#xff0c;现在在异机恢复一个数据库的测试环境&#xff0c;即利用standby数据库的备份恢复一个新的数据库。 1、查看standby 数据库备份脚本 #!/bin/sh . ~/.bash_profile DATEdate …

【VTKExamples::PolyData】第四十六期 Reflection

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例Reflection,并解析接口vtkReflectionFilter,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. Reflection …

Docker容器详解

一、概述 1.1 基本概念&#xff1a; Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚…

SpringCloud 各自组件的停更/升级/替换

一、停更不停用 现在 SpringCloud 不再修复 bug&#xff0c;也不再接收合并请求&#xff0c;也不再发布新版本&#xff0c;但是目前还是可以继续使用的。 二、以前的组件 以前 SpringCloud 常用的组件如下图&#xff0c;服务的注册和发现使用 Eureka&#xff0c;服务的负载和调…

深入理解c指针(七)

目录 十、回调函数和qsort函数 1、回调函数 2、简单介绍size_t 数据类型 3、qsort 排序函数 3.1 qsort函数简单举例1&#xff08;升序排序&#xff09; 3.2 qsort函数简单举例2&#xff08;字符串长度排序&#xff09; 3.3 简单讲解 -> 操作符 3.4 常见符号的ASCII…

如何利用会话式AI提升你的工作效率?

会话式AI如何改变我们的生活和工作 在当今时代&#xff0c;内容策略的重要性日渐凸显&#xff0c;良好的内容策略能够与流量及转化率紧密相连&#xff0c;成为企业在内容策略领域不容忽视的营销工具之一。 然而&#xff0c;目前内容同质化现象严重&#xff0c;企业若想在内容营…

iPaas数据传输的方式

一、iPaas平台概述 iPaas&#xff08;Integration Platform as a Service&#xff09;平台&#xff0c;作为一种先进的云计算服务模式&#xff0c;为开发者和企业提供了一种全面且灵活的应用集成解决方案。它构建在PaaS&#xff08;Platform as a Service&#xff09;基础之上…

【C++庖丁解牛】初始化列表 | Static对象 | 友元函数

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1. 再谈构造函数1.1 …

WiFi模块赋能智能手表:拓展功能与提升连接性

随着科技的不断进步&#xff0c;智能手表正逐渐成为现代人生活中不可或缺的智能配饰。其中&#xff0c;WiFi模块的应用为智能手表带来了更多强大的功能和更高的连接性&#xff0c;为用户提供了更为便捷、智能化的使用体验。本文将深入探讨WiFi模块在智能手表中的应用。 远程通信…

RK DVP NVP6158配置 学习

NVP6158简介 NVP6158C是一款4通道通用RX&#xff0c;提供高质量图像的芯片。它接受来自摄像机和其他视频信号的独立4通道通用输入来源。它将4通道通用1M至8M 7.5P视频格式数字化并解码为代表8位ITU-R BT.656/1120 4:2:2格式的数字分量视频&#xff0c;并将单独的BT.601格式与27…

牛客小白月赛84_C-k级序列

这道题的思路还是很好想的,前一个的值,一定要<当前值范围的最大值 非常有意思的一个点就是,在保证上面的条件成立后,这个pre该怎么给? 刚开始想以为是贪心,就-k,往少了给,但写着写着发现不对劲,这个k>pre, 而这个-k可没保证>pre啊 其实,这个pre给值的范围是[a-k,…

机器学习介绍

机器学习是人工智能领域的一个重要分支&#xff0c;它利用算法和统计模型使计算机系统能够从数据中“学习”并改进其性能&#xff0c;而无需进行明确的编程。在过去的几十年里&#xff0c;机器学习技术取得了显著的进步&#xff0c;并在许多领域产生了深远的影响。本文将对机器…

输出控制符 %s 的理解

首先%s是控制输出字符串的。其输出成员的本质是指针&#xff01;&#xff01;&#xff01;&#xff01; 从当前指针开始&#xff0c;到/0停止 char* p "abcd"; printf("%s\n", p); //会输出abcd 其次printf支持直接输出字符串 printf("abc…

Vitual Box虚拟机打开后,键盘鼠标失效

Vitual Box虚拟机打开后&#xff0c;键盘鼠标失效 作者在使用Vitual Box虚拟机软件时&#xff0c;偶然发现打开VitualBox后&#xff0c;鼠标和键盘均无法使用。 你以为是“主机热键”引起的&#xff1f;NO&#xff01; 废话少说 直接上干货&#xff1a; 在VitualBox设置下有…