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

news/2024/4/29 15:39:46/文章来源:https://blog.csdn.net/qq_44814825/article/details/127383020

买卖股票的最佳时机III

在这里插入图片描述

动态规划-分两小组分别计算(超时)

class Solution {
public:int partprofit( vector<int>& prices , int start , int end ){if((end-start)<=1) return 0;vector<int> dp(end - start , 0);int min = prices[start];for(int i=1 ; i< end-start ;i++){if(prices[start + i] < min) min = prices[start + i];dp[i] = max(dp[i-1]  , prices[start + i]-min);}// for(auto it:dp) cout<<it<<' ';return dp[ end - start -1];}int maxProfit(vector<int>& prices) {if(prices.size() <= 1) return 0;int val1=0 , val2=0 , maxval=0;for(int i=0 ; i<prices.size(); i++){val1 = partprofit(prices , 0 , i);val2 = partprofit(prices , i ,prices.size());if(val1 + val2 > maxval ) maxval = val1+val2;cout<<val1+val2<<' ';}cout<<endl;return maxval;}
};

动态规划

确定dp数组以及下标的含义

  1. 没操作
  2. 第一次持有股票(包括之前买的和今天买的)
  3. 第一次不持有股票(包括之前没买和今天卖了)
  4. 第二次持有股票
  5. 第二次不持有股票

dp[i][j]中 i表示第i天,j为 [0 - 4] 五个状态,dp[i][j]表示第i天状态j所剩最大现金。

确定递推公式

达到持有状态,有两个具体操作:

  • 第i天买入股票了,那么dp[i][1/3] = dp[i-1][0/2] - prices[i]
  • 第i天没有操作,而是沿用前一天买入的状态,即:dp[i][1/3] = dp[i - 1][1/3]

达到不持有状态,也有两个操作:

  • 第i天卖出股票了,那么dp[i][2/4] = dp[i - 1][1/3] + prices[i]
  • 第i天没有操作,沿用前一天卖出股票的状态,即:dp[i][2/4] = dp[i - 1][2/4]

dp数组如何初始化

  • dp[0][0] = 0;
  • dp[0][1/3] = -prices[0];
  • dp[0][2/4] = 0;

在这里插入图片描述

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

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

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

相关文章

视觉检测工作台设计

目 录 摘 要 I Abstract II 第1章 引言 1 1.1研究背景及意义 1 1.2国内外研究现状 2 第2章 总体方案的确定 4 2.1方案拟定 4 2.1.1机械结构 4 2.1. 2控制工艺要求 5 2.1. 3总体方案 5 2.2 设计参数 7 第3章 视觉检测工作台机械系统设计 8 3.1 X-Y数控工作台总体方案的确定 8 3.…

微信公众号查题搜题平台

微信公众号查题搜题平台 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击跳转&#xf…

物联网、区块链、元宇宙和虚拟数字人离普罗大众有多远?

首先&#xff0c;我们最早理解的数字人就是数字虚拟的一个假人&#xff0c;可能看起来很像二次元玩偶的样子。今天我觉得数字人是一种虚拟的数字身份&#xff0c;无所谓你的形象是仿真或是任何形象&#xff0c;包括你在现实中无法实现的形象&#xff0c;你在梦想中所渴望的概念…

【数据结构与算法分析】0基础带你学数据结构与算法分析01--基础数学知识

&#x1f353;个人主页&#xff1a;个人主页 &#x1f4ac;推荐一款模拟面试、刷题神器&#xff0c;从基础到大厂面试题&#xff1a;点击跳转进入网站 &#x1f4e9;如果你想学习算法&#xff0c;以及一些语言基础的知识&#xff0c;那就来这里&#xff1a;​​​​刷题网站 跟…

无公网IP远程黑群晖【内网穿透】

无公网IP远程黑群晖【内网穿透】1. 安装cpolar群晖套件2、打开cpolar套件3. 创建远程访问隧道4. 获取公网地址访问由于黑群晖没办法用QuickConnect&#xff0c;洗白也比较麻烦&#xff0c;所以这里用内网穿透的方法来实现远程。 这里推荐一款免费不限制流量的内网穿透工具cpol…

二维数组(理论)

二维数组的定义和操作 学习目标&#xff1a; 1、理解二维数组及其存储结构。 2、掌握二维数组的初始化、输入输出等基本操作。 引入&#xff1a; 由前面介绍可知&#xff0c;一维数组的元素可以是任何基本数据类型&#xff0c;也可以是结构体。那么&#xff0c;如果一维数组的…

新闻订阅及新闻内容展示系统(Python+Django+scrapy)

目录 摘 要 1 Abstract 2 第一章 引言 3 1.1 项目的背景和意义 3 1.2.1 个性化新闻服务现状 4 1.2.2 网络爬虫研究现状 4 1.2.3 项目的范围和预期结果 4 第二章 技术与原理 5 2.1 技术选型 5 2.2 相关原理介绍 7 第三章 系统需求分析 10 3. 1 新闻订阅系统用例析取 10 3.2 新闻…

干扰管理学习日志4-------信道估计方法 LS(最小二乘)、MMSE(最小均方误差)

目录一、信道估计定义二、LS估计(最小二乘法)1.定义2.系统模型3.损失函数4.模型求解三、MMSE估计(最小均方误差)1.定义2.系统模型3.损失函数4.模型求解5.模型结果一、信道估计定义 信道估计&#xff0c;就是从接收数据中将假定的某个信道模型的模型参数估计出来的过程。如果信…

【每日算法题】合并两个有序数组(简单)

前言 给大家分享一个小技巧✔&#xff0c;当我们刷题的时候&#xff0c;最好就是集中刷某一类型的题目&#xff0c;不要刷一道排序&#xff0c;又一道数组&#xff0c;这种混乱刷题&#xff0c;不利于我们记忆&#xff0c;集中刷题可以保证刷题的效果&#xff0c;保证效率&…

10. IDEA 项目使用 Git 管理

文章目录10.1 需求 1-说明10.2 需求 1-实现步骤10.2.1 界面操作10.2.2 也可以使用命令行完成10.3 需求 2-说明10.4 需求 2-实现步骤10.4.1 界面操作10.4.2 也可以使用命令行完成 (具体参考上文)10.5 如何查看操作记录10.5.1 示意图10.6 需求 3-说明10.6.2 具体演示 -pull10.1 需…

包装类概述

Java中有8中基本数据类型&#xff0c;分别是&#xff1a; 包装类就是这8种数据类型所对应的引用数据类型&#xff0c;分别是&#xff1a; - 可能有同学会问&#xff1a;Java为什么要给基本数据类型提供对应的引用数据呢? - 第一&#xff0c;Java是面向对象的语言&#xff0c…

进入python的世界_day17_python基础——了解模块、如何使用和导入模块、包的原理

一、模块介绍 1.什么是模块 ​ 其实我们前一阵已经接触过了,import xxx 、from xx import xxx ​ 能够有一定功能的集合体就是模块,比如有某些功能的py文件,包含这个文件的文件夹 ​ python之所以流传的这么广有很重要一个因素就是模块非常丰富,社区活跃,干活效率高 2.…

一文快速上手Vue之计算属性和侦听器,过滤器

计算属性和侦听器 1、计算属性&#xff08;computed&#xff09; 某些结果是基于之前数据实时计算出来的&#xff0c;我们可以利用计算属性。来完成 示例&#xff1a; <div id"app"> <ul> <li>西游记&#xff1a;价格{{xyjPrice}}&#xff0c;…

【设计模式】责任链模式,让程序员摆脱乱糟糟的零散的代码

函数式编程是一种思维模式。该使用什么样的方式去解决你的问题?就像你不想去破解一个代码块完整性(内聚),那么你可以加入一个切面,去影响该代码块的执行结果。以函数方式思考。对于一个业务逻辑,如果以函数的角度思考,那么可以抽离出若干的函数进行处理,而非乱糟糟的零…

socket编程—UDP套接字

socket编程—UDP套接字一、UDP套接字socket函数的参数socket&#xff08;&#xff09;函数返回值1、服务端创建套接字绑定端口提供服务2、客户端创建套接字一、UDP套接字 IP是标识互联网当中的唯一一台主机 端口号是标识一台主机内的唯一一个进程 两者相加就是标识互联网当中唯…

245 - 转换流

1、转换流&#xff1a; InputStreamReader , OutputStreamWriter 【1】转换流&#xff1a;作用&#xff1a;将字节流和字符流进行转换。 【2】转换流 属于 字节流还是字符流&#xff1f; 属于字符流 InputStreamReader &#xff1a;字节输入流 —> 字符的输入流 Outp…

Odoo | 页面视图的跳转逻辑

目录前言页面跳转的流程及逻辑点击后进入 call\_botton方法&#xff0c;验证先检查method方法名。内置方法&#xff0c;检查方法名&#xff0c;如果是私有方法&#xff0c;提示错误。方法名合法之后进入call\_kw方法&#xff0c;检查api的值。获取一些系统的上下文&#xff0c;…

【3D游戏建模全流程教学】使用3dmax制作教堂场景

本文分享了使用3dmax制作教堂场景的流程&#xff0c;并解释V-Ray的渲染过程。 01场景制作 在网站中收集许多的参考图像&#xff0c;然后使用平面、立方体和圆柱体等基本形状来制作场景。再制作基础照明以了解场景的构图和总体外观&#xff0c;从视口制作预览动画。 下一步是创…

计算机体系机构的发展

40年代&#xff0c;当时的 计算机是采用什么样的方式来工作的&#xff0c;比如是不是采用存储程序的方式还是采用程序控制的方式&#xff0c;最典型的是第一台计算机他是采用硬件互联的方式实现的&#xff0c;第一台采用存储程序的计算机时ENIAC 60年代&#xff0c;人们更关注…

Vue中的数据代理

什么是数据代理 数据代理&#xff1a;通过一个对象代理对另一个对象中属性的操作(读/写)。 想要更加深刻的理解什么是数据代理&#xff0c;就必须先了解JS中对象的一个方法&#xff1a;Object.defineProperty()&#xff0c;数据代理主要使用Object.defineProperty()的第三个参数…