LeetCode算法题解(动态规划,股票买卖)|LeetCode121. 买卖股票的最佳时机、LeetCode122. 买卖股票的最佳时机 II
一、LeetCode121. 买卖股票的最佳时机
题目链接:121. 买卖股票的最佳时机
题目描述:
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
示例 1:
输入:[7,1,5,3,6,4] 输出:5 解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
示例 2:
输入:prices = [7,6,4,3,1] 输出:0 解释:在这种情况下, 没有交易完成, 所以最大利润为 0。
提示:
1 <= prices.length <= 1050 <= prices[i] <= 104
算法分析:
定义dp数组及下标含义:
dp[i][0]表示第i天持有股票时所得的最大利润,dp[i][1]表示第i天不持有股票时所得的最大利润。
递推公式:
第i天持有股票,可以由i-1天是否持有股票两种状态推出来:
i-1天持有股票,那么保持现状,dp[i][0]=dp[i-1][0]。
i-1天不持有股票,那么在i天买入股票,dp[i][0]=-prices[i](注意买卖只有一天,所以买入股票当天的利润是-prices[i]),利润可以为负数。
所以第i天持有股票是所得的最大利润dp[i][0]=max(dp[i-1][0],-prices[i]);
第i天不持有股票,也可以由i-1天书否持有股票的两种状态推出来:
i-1天持有股票,那么在i天卖出股票,dp[i][1]=dp[i-1][0]+prices[i](卖出股票时得到的利润为持有股票时的利润加上i天的股票价格)
i-1天不持有股票,那么保持现状,dp[i][1]=dp[i-1][1]。
所以第i天不持有股票时所得的最大利润为dp[i][1]=max(dp[i-1][0]+prices[i],dp[i-1][1]);
初始化:
第零天持有股票dp[0][0]=-prices[0];
第零天不持有股票dp[0][1]=0;
遍历顺序:
从左到右依次遍历每一天都股票价格。
打印dp数组进行验证。
代码如下:
class Solution {public int maxProfit(int[] prices) {int[][] dp = new int[prices.length][2];dp[0][0] = -prices[0];dp[0][1] = 0;for(int i = 1; i < prices.length; i++) {dp[i][0] = Math.max(dp[i-1][0], -prices[i]);dp[i][1] = Math.max(dp[i-1][1], dp[i-1][0] + prices[i]);}return dp[prices.length - 1][1];}
}
二、LeetCode122. 买卖股票的最佳时机 II
题目链接:122. 买卖股票的最佳时机 II
题目描述:
给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。
在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。
返回 你能获得的 最大 利润 。
示例 1:
输入:prices = [7,1,5,3,6,4] 输出:7 解释:在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4 。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3 。总利润为 4 + 3 = 7 。
示例 2:
输入:prices = [1,2,3,4,5] 输出:4 解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4 。总利润为 4 。
示例 3:
输入:prices = [7,6,4,3,1] 输出:0 解释:在这种情况下, 交易无法获得正利润,所以不参与交易可以获得最大利润,最大利润为 0 。
提示:
1 <= prices.length <= 3 * 1040 <= prices[i] <= 104
算法分析:
定义dp数组及下标含义:
dp[i][0]表示第i天持有股票时所得利润,dp[i][1]表示第i天不持有股票时所得最大利润。
递推公式:
第i天持有股票,可以由i-1天是否持有股票两种状态推出来:
i-1天持有股票,那么保持现状,dp[i][0]=dp[i-1][0]。
i-1天不持有股票,那么在i天买入股票,dp[i][0]=dp[i-1][1]-[prices[i](注意买卖可以有多天,所以买入股票当天的利润可能包含之前买卖过股票的利润。
所以第i天持有股票是所得的最大利润dp[i][0]=max(dp[i-1][0],-prices[i]);
第i天不持有股票,也可以由i-1天书否持有股票的两种状态推出来:
i-1天持有股票,那么在i天卖出股票,dp[i][1]=dp[i-1][0]+prices[i](卖出股票时得到的利润为持有股票时的利润加上i天的股票价格)
i-1天不持有股票,那么保持现状,dp[i][1]=dp[i-1][1]。
所以第i天不持有股票时所得的最大利润为dp[i][1]=max(dp[i-1][0]+prices[i],dp[i-1][1]);
初始化:
dp[0][0]=prices[0],第零天持有股票。
dp[0][1]=0,第零天不持有股票。
遍历顺序:
从左到右依次遍历每天的股票。
打印dp数组。
代码如下:
class Solution {public int maxProfit(int[] prices) {int[][] dp = new int[prices.length][2];dp[0][0] = -prices[0];dp[0][1] = 0;for(int i = 1; i < prices.length; i++) {dp[i][0] = Math.max(dp[i-1][0], dp[i-1][1]-prices[i]);dp[i][1] = Math.max(dp[i-1][1], dp[i-1][0]+prices[i]);}return dp[prices.length-1][1];}
}
总结
这两道题其实不用动态规划还好做一点。
相关文章:
LeetCode算法题解(动态规划,股票买卖)|LeetCode121. 买卖股票的最佳时机、LeetCode122. 买卖股票的最佳时机 II
一、LeetCode121. 买卖股票的最佳时机 题目链接:121. 买卖股票的最佳时机 题目描述: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一…...
python实验3 石头剪刀布游戏
实验3:石头剪刀布游戏 一、实验目的二、知识要点图三、实验1. 石头剪刀布2. 实现大侠个人信息 一、实验目的 了解3类基本组合数据类型。理解列表概念并掌握Python中列表的使用。理解字典概念并掌握Python中字典的使用。运用jieba库进行中文分词并进行文本词频统计。…...
米贸搜|如何设置 Facebook 转换 API + 事件重复数据删除
Facebook Pixel 可让您跟踪用户在您网站上的行为、收集再营销受众并创建相似对象。如果 Facebook 像素实现正确,它将向 FB 机器学习算法提供相关信息。 FB ML 将使用像素数据向最有可能转化的人展示您的广告。 几年来,我们可以通过 JavaScript 代码、应…...
python每日一题——11滑动窗口最大值
题目 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值 。 示例 1: 输入:nums [1,3,-1,-3,5,3,6,7], k 3…...
【C++ 程序设计入门基础】- 第3节-循环结构01
目录 循环结构 一、for 语句 for 循环案例 输入一个整数n,输出1~n的所有整数。 编译运行,查看输出结果 编译调试 for 循环结构语义分析 二、beak 语句 三、continue 语句 案例1: 案例2: 案例3: 循环…...
人工智能原理复习--知识表示(一)
文章目录 上一篇知识概述命题逻辑谓词逻辑谓词逻辑的应用 下一篇 上一篇 人工智能原理复习–绪论 知识概述 知识就是人类认识自然界的精神产物,是人类进行智能活动的基础。 是经过加工的信息,包括事实、信念和启发式规则。 分类: 按作用可…...
网络运维与网络安全 学习笔记2023.11.28
网络运维与网络安全 学习笔记 第二十九天 今日目标 OSPF汇总之域间路由、OSPF汇总之外部路由、OSPF链路认证 OSPF安全认证之区域认证、OSPF虚链路 OSPF汇总指域间路由 项目背景 企业内网运行多区域的OSPF网络,在R1 上存在多个不稳定的链路 R1上的不稳定链路&a…...
Rust开发——数据对象的内存布局
枚举与Sized 数据 一般数据类型的布局是其大小(size)、对齐方式(align)及其字段的相对偏移量。 1. 枚举(Enum)的布局: 枚举类型在内存中的布局通常是由编译器来确定的。不同的编译器可能有不…...
mySQL踩坑记录
1.MYSQL Workbench-8.0.27.1出现"Exception: Current profile has no WMI enabled"错误的解决方法 MYSQL Workbench-8.0.27.1出现“Exception: Current profile has no WMI enabled“错误的解决方法_赛风扥的博客-CSDN博客 C:\Program Files\MySQL\MySQL Workbench …...
【Java】使用 IDEA 快速生成 SpringBoot 模块
项目目录下新建 module 模块 在 pom.xml 更改为 spring initializr 配置之后的 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchem…...
2023网络安全产业图谱
1. 前言 2023年7月10日,嘶吼安全产业研究院联合国家网络安全产业园区(通州园)正式发布《嘶吼2023网络安全产业图谱》。 嘶吼安全产业研究院根据当前网络安全发展规划与趋势发布《嘶吼2023网络安全产业图谱》调研,旨在进一步了解…...
一则 MongoDB 副本集迁移实操案例
文中详细阐述了通过全量 增量 Oplog 的迁移方式,完成一套副本集 MongoDB 迁移的全过程。 作者:张然,DBA 数据库技术爱好者~ 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 本文约 900…...
2022年03月 Scratch图形化(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共10题,每题2分,共30分) 第1题 由1,2,3,4,5,0这六个数字经过排列组合能够组成多少个六位数偶数?注意:每一位都不相同,最高位不能为0。 A:720 B:360 C:312 D:88 答案:C 逻辑知识单选题 第2题 运行以下程…...
传音荣获2023首届全国人工智能应用场景创新挑战赛“智能家居专项赛”三等奖
近日,中国人工智能学会与科技部新一代人工智能发展研究中心联合举办2023首届全国人工智能应用场景创新挑战赛(2023 1st China’s Innovation Challenge on Artificial Intelligence Application Scene,以下简称CICAS 2023),吸引了…...
SQL注入-SQL注入过程
SQL注入的过程 手工注入过程 (1) 判断是否存在注入点; (2) 判断字段长度(字段数); (3) 判断字段回显位置; (4) 判断数据库信息; (5) 查找数据库名; (6) 查找数据库表; (7) 查找数据库表中所有字段以及字段值; (8) 猜解账号密码; (9) 登录管理员后台; 以sql-labs less-2举例 会…...
选择更灵活的设计工具:SOLIDWORKS 软件网络版与单机版的比较
随着科技的飞速发展,工程设计领域对于高效、灵活的设计工具需求日益增加。SOLIDWORKS 作为一款广受欢迎的三维设计软件,提供了网络版和单机版两种选择。在本文中,我们将深入探讨这两个版本的区别,并为您详细介绍它们的价格差异。 …...
Go语言中获取协程ID
简介 java同事都知道,线程会有对应的id,那么go语言中协程有id吗,其实是有的,但是不建议使用。 实在需要使用的话可以使用本文的例子获取 stack 我们先看一下runtime.Stack打印出来的栈结构,其中就包括了协程id fu…...
CH58x-BLE 程序阅读笔记
CH58x-BLE 程序阅读笔记 1. 广播1.1 广播类型设置1.2 广播数据长度 2. MTU设置2.1 CH58x 蓝牙协议栈支持有效最大MTU为247 1. 广播 1.1 广播类型设置 1.2 广播数据长度 1) GAP-广播数据(最大大小31字节,但最好保持较短以节省广告时的电量&a…...
ST53xx 系列是一种高精度、高输入电压、低静态电流、高速度、低压差线性稳压器
ST53xxS/T 40V,低静态电流,高可靠性 LDO 概述: ST53xx 系列是一种高精度、高输入电压、低静态电流、高速度、低压差线性稳压器,具有高纹波抑制能力。在 Vour 5V VIN 7V 时,输入电压高达40V,负载电流高达300…...
麻雀搜索优化算法MATLAB实现,SSA-BP网络
对于麻雀搜索算法的介绍,网上已经有不少资料了,这边公布SSA的matlab实现 下面展示SSA算法的核心代码以及详细注解 % 麻雀搜索算法函数定义 % 输入:种群大小(pop),最大迭代次数(Max_iter),搜索空间下界(lb),…...
安装对中不到位,丝杆升降机越用越费!5大严重后果必看
在设备安装现场,经常能看到这样的场景:工人用卷尺大概量一下电机座和升降机输入轴的距离,然后用锤子把联轴器敲进去,螺栓拧紧就完事了。他们不知道,这种“差不多”的对中操作,正在为丝杆升降机埋下致命隐患…...
xpath爬取网页图片
# 1. 导入需要的工具包 import requests # 用来发送网络请求,爬取网页 from lxml import etree # 用来解析网页,提取图片 import os # 用来创建文件夹,保存图片 import time # 用来延时,防止爬太快被封# 2. 设置图片保存的位置…...
SecGPT-14B私有化部署:企业内网安全使用OpenClaw的方案
SecGPT-14B私有化部署:企业内网安全使用OpenClaw的方案 1. 为什么需要内网专属AI助手 去年我在某金融机构参与了一个敏感项目,客户要求所有数据处理必须在隔离网络中完成。当我第一次尝试用公有云API调用AI能力时,安全团队立即叫停了整个流…...
实验二四叉树图像模糊项目教程
四叉树图像模糊项目教程 📖 项目简介 这是一个使用四叉树算法实现图像模糊处理的C++项目。程序实现了两种图像模糊方法: 高斯模糊:传统的图像平滑方法 四叉树平均模糊:基于四叉树分割的自适应模糊方法 两种方法可以对比使用,让你直观感受不同算法的效果差异。 🎯 核心…...
RVStarArduino:RISC-V架构下的Arduino兼容开发框架
1. RVStarArduino:面向RISC-V架构的Arduino兼容开发框架RVStarArduino是专为Nuclei RVStar开发板设计的Arduino兼容开发框架,其核心目标是将Arduino生态的易用性与RISC-V架构的硬件特性深度融合。该框架并非简单的代码移植,而是基于Nuclei SD…...
基于单片机的自动存包柜设计
1. 系统总体设计 点击链接下载protues仿真设计资料:https://download.csdn.net/download/m0_51061483/91926418 1.1 设计背景 随着公共场所(如商场、车站、学校等)对自助服务需求的不断提升,自动存包柜逐渐成为智能化服务设施的…...
如何快速掌握GCViewer:全面解读Java GC暂停、Full GC与安全点暂停分析指南
如何快速掌握GCViewer:全面解读Java GC暂停、Full GC与安全点暂停分析指南 【免费下载链接】GCViewer Fork of tagtraum industries GCViewer. Tagtraum stopped development in 2008, I aim to improve support for Suns / Oracles java 1.6 garbage collector log…...
手机扩大屏定制厂家:菲涅尔高清模压技术护航跨境出海
在跨境电商快速发展的如今,手机屏幕放大器作为移动配件领域的细分品类,正在成为全球卖家关注的焦点。然而,货源不稳定、产品同质化、知识产权风险、镜片清晰度不佳等行业痛点,始终困扰着跨境电商从业者。如何找到一家技术过硬、供…...
喔去,litellm 竟然被投毒了,赶紧检查你的机器中招了没有送
一、什么是setuptools? setuptools 是一个用于创建、分发和安装 Python 包的核心库。 它可以帮助你: 定义 Python 包的元数据(如名称、版本、作者等)。 声明包的依赖项,确保你的包能够正确运行。 构建源代码分发包&…...
别再被mmcv和mmseg升级搞崩溃了!手把手教你从1.x平滑迁移到2.x(附完整API对照表)
从MMSegmentation 1.x到2.x的无痛迁移指南:架构变革与API重构全景解析 第一次尝试将项目从MMSegmentation 1.x升级到2.x时,我盯着满屏红色报错信息足足发呆了十分钟——这感觉就像走进一个熟悉的房间却发现所有家具都被重新摆放了。作为OpenMMLab生态的重…...
