leetcode hot100 买卖股票的最佳时机1

在这里插入图片描述
本题之前采用贪心算法来解决,现在可以采用动态规划来解决,通过dp数组记录每次的状态从而获取到最大的利润。

这里dp数组定义为二维数组 dp[price.length][2],其中price.length表示第i天,[2]其中有0/1两种状态,[0]表示持有股票,[1]表示没有持有股票。注意,持有并不代表一定是当天买入!也可能是之前买入的。

那么,dp[i][0]表示第i天持有股票,那么i-1天可能持有股票,此时是dp[i-1][0],如果第i-1天没有持有股票,那一定是第i天买入的,第i天买入股票,由于开始的时候手里没有钱,当买入的时候,手里的金额是-price[i]。所以 持有股票的递推公式dp[i][0] = Math.max(dp[i-1][0],-price[i])。如果第i天不持有,就是dp[i][1] ,第i天不持有的话,可能是i-1天就不持有了,那么就是dp[i-1][1],也可能是第i天卖掉了,那么就是dp[i-1][0]+price[i]。所以递推公式就是dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0]+prices[i])。

初始化:dp[0][0],表示第0天持有股票,那么一定是当天买入的股票,所以此时是-price[0]。dp[0][1]表示第0天不持有股票,则一定是0.

遍历顺序:我们是根据前一天的状态得到后一天的状态,所以i从1开始,直接遍历。

打印数组

class Solution {public int maxProfit(int[] prices) {if (prices == null || prices.length == 0) return 0;int length = prices.length;// dp[i][0]代表第i天持有股票的最大收益// dp[i][1]代表第i天不持有股票的最大收益int[][] dp = new int[length][2];int result = 0;dp[0][0] = -prices[0];dp[0][1] = 0;for (int i = 1; i < length; i++) {dp[i][0] = Math.max(dp[i - 1][0], -prices[i]);dp[i][1] = Math.max(dp[i - 1][0] + prices[i], dp[i - 1][1]);}return dp[length - 1][1];}
}

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

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

相关文章

六、回归与聚类算法 - 欠拟合和过拟合

目录 1、定义 2、原因及解决方法 2.1 正则化 线性回归欠拟合与过拟合线性回归的改进 - 岭回归分类算法&#xff1a;逻辑回归模型保存与加载无监督学习&#xff1a;K-means算法 1、定义 2、原因及解决方法 2.1 正则化

电路设计(26)——速度表的multisim仿真

1.设计要求 设计一款电路&#xff0c;能够实时显示当前速度。 用输入信号模拟行驶的汽车&#xff0c;信号频率的1hz代表汽车速度的1m/s。最后速度显示&#xff0c;以km/h为单位。 2.电路设计 当输入信号频率为40HZ时&#xff0c;显示的速度应该为144KM/h&#xff0c;仿真结果为…

HTTP基本概念-HTTP 常见的状态码有哪些?

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) HTTP 常见的状态码有哪些? 1xx 类状态码属于提示信息&#xff0c;是协议处理中的一种中间状态&#xff0c;实际用到的比较少。 2xx 类状态码表示服务器成功处理了客户端的请求&#xff0c;也是我们最愿…

第一个 Angular 项目 - 添加服务

第一个 Angular 项目 - 添加服务 这里主要用到的内容就是 [Angular 基础] - service 服务 提到的 前置项目在 第一个 Angular 项目 - 动态页面 这里查看 想要实现的功能是简化 shopping-list 和 recipe 之间的跨组件交流 回顾一下项目的结构&#xff1a; ❯ tree src/app/…

[概念区分] 正则表达式与正则化

正则表达式与正则化 机器学习在计算机科学和数据处理领域&#xff0c;关于“正则”的两个术语&#xff1a;正则表达式和正则化&#xff0c;虽然它们在名称上非常相似&#xff0c;但实际上它们是完全不同的概念。 正则表达式 也被称为 regex&#xff0c;是一种强大的工具&…

Linux freezer机制

一、概述 系统进入suspended或进程被加入到cgroup冻结或解冻分组&#xff0c;用户进程和部分内核线程被冻结后&#xff0c;会剥夺执行cpu资源&#xff0c;解冻或唤醒后恢复正常。 二、进程冻结与解冻原理 2.1 进程冻结 用户进程和内核线程冻结的基本流程&#xff1a; 内核态…

设计模式-建造者模式(Builder Pattern)

一、建造者模式说明 建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;它的主要目的是将一个复杂对象的构建过程与其表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 在建造者模式中&#xff0c;通常涉及以下几个角色&#xf…

多业务场景下对于redis分布式锁的一些思考

现在让你写一个Redis分布式锁 大概率你会先写一个框架 public Boolean setIfAbsent(String key, Object value,Long timeout) {try {return Boolean.TRUE.equals(objectRedisTemplate.opsForValue().setIfAbsent(key, value,timeout,TimeUnit.SECONDS));} catch (Exception e) …

2024开年,手机厂商革了自己的命

文&#xff5c;刘俊宏 编&#xff5c;王一粟 2024开年&#xff0c;AI终端的号角已经由手机行业吹响。 OPPO春节期间就没闲着&#xff0c;首席产品官刘作虎在大年三十就迫不及待地宣布&#xff0c;OPPO正式进入AI手机时代。随后在开年后就紧急召开了AI战略发布会&#xff0c;…

【Antd】Form 表单获取不到 Input 的值

文章目录 今天遇到了一个奇怪的bug&#xff0c;Form表单中的Input组件的值&#xff0c;不能被Form获取&#xff0c;导致输入了内容&#xff0c;但是表单提交的时候值为undefined 报错代码 import { Button, Form, Input } from antd; import React from react;const App: Rea…

GaussDB SQL调优:建立合适的索引

背景 GaussDB是华为公司倾力打造的自研企业级分布式关系型数据库&#xff0c;该产品具备企业级复杂事务混合负载能力&#xff0c;同时支持优异的分布式事务&#xff0c;同城跨AZ部署&#xff0c;数据0丢失&#xff0c;支持1000扩展能力&#xff0c;PB级海量存储等企业级数据库…

SQL中为什么不要使用1=1

最近看几个老项目的SQL条件中使用了11&#xff0c;想想自己也曾经这样写过&#xff0c;略有感触&#xff0c;特别拿出来说道说道。 编写SQL语句就像炒菜&#xff0c;每一种调料的使用都可能会影响菜品的最终味道&#xff0c;每一个SQL条件的加入也可能会影响查询的执行效率。那…

昨天Google发布了最新的开源模型Gemma,今天我来体验一下

前言 看看以前写的文章&#xff0c;业余搞人工智能还是很早之前的事情了&#xff0c;之前为了高工资&#xff0c;一直想从事人工智能相关的工作都没有实现。现在终于可以安静地系统地学习一下了。也是一边学习一边写博客记录吧。 昨天Google发布了最新的开源模型Gemma&#xf…

电商数据采集的几个标准

面对体量巨大的电商数据&#xff0c;很多品牌会选择对自己有用的数据进行分析&#xff0c;比如在控价过程中&#xff0c;需要对商品的价格数据进行监测&#xff0c;或者是需要做数据分析时&#xff0c;则需要采集到商品的价格、销量、评价量、标题、店铺名等信息&#xff0c;数…

Unity中.Net与Mono的关系

什么是.NET .NET是一个开发框架&#xff0c;它遵循并采用CIL(Common Intermediate Language)和CLR(Common Language Runtime)两种约定&#xff0c; CIL标准为一种编译标准&#xff1a;将不同编程语言&#xff08;C#, JS, VB等&#xff09;使用各自的编译器&#xff0c;按照统…

JavaScript 原始值和引用值在变量复制时的异同

相比于其他语言&#xff0c;JavaScript 中的变量可谓独树一帜。正如 ECMA-262 所规定的&#xff0c;JavaScript 变量是松散类型的&#xff0c;而且变量不过就是特定时间点一个特定值的名称而已。由于没有规则定义变量必须包含什么数据类型&#xff0c;变量的值和数据类型在脚本…

mysql.service is not a native service, redirecting to systemd-sysv-install

字面意思&#xff1a;mysql.service不是本机服务&#xff0c;正在重定向到systemd sysv安装 在CentOS上使用Systemd管理MySQL服务的具体步骤如下&#xff1a; 1、创建MySQL服务单元文件&#xff1a; 首先&#xff0c;你需要创建一个Systemd服务单元文件&#xff0c;以便Syste…

【Python笔记-设计模式】原型模式

一、说明 原型模式是一种创建型设计模式&#xff0c; 用于创建重复的对象&#xff0c;同时又能保证性能。 使一个原型实例指定了要创建的对象的种类&#xff0c;并且通过拷贝这个原型来创建新的对象。 (一) 解决问题 主要解决了对象的创建与复制过程中的性能问题。主要针对…

redhawk:使用ipf文件反标instance power

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 往期文章链接: Redhawk:Input Data Preparation 使用ptpx和redhawk报告功耗时差别总是很大,如果需要反标top/block的功耗值可以在gsr文件中使用BLOCK_POWER_FOR_SCALING的命令

Verilog刷题笔记35

题目&#xff1a; Create a 1-bit wide, 256-to-1 multiplexer. The 256 inputs are all packed into a single 256-bit input vector. sel0 should select in[0], sel1 selects bits in[1], sel2 selects bits in[2], etc. 解法&#xff1a; module top_module( input [255:…