【java】力扣 买卖股票的最佳时机 动态规划

文章目录

  • 题目链接
  • 题目描述
    • 思路
    • 代码

题目链接

121.买卖股票的最佳时机

题目描述

在这里插入图片描述

思路

本题主要用到了动态规划
1.先定义dp数组的含义
先定义一个二维数组dp
然后dp[i][0]来表示第i天持有股票的现金
dp[i][1]代表第i天不持有股票的现金
刚开始的现金为0,当第i天买入时,现金就成为了-prices[i]
设置成"持有",“持有”不代表是当天买入,有可能是之前买入 而保持持有的状态
2.递归公式
dp[i][0] = max(dp[i-1][0],-prices[i]);
**dp[i-1][0]**表示的是在i-1天就持有股票,一直保持持有的状态
-prices[i] 表示的是当天买入的股票后的现金
同理,
dp[i][1] =max(dp[i-1][1],prices[i]+dp[i-1][0])
**dp[i-1][1]**表示的是第i-1天就不持有股票,然后保持原状,所得现金就是昨天不持有股票的所得现金
prices[i]+dp[i-1][0] 表示的是当天卖出的股票所得的现金
3.初始化
dp[0][0] =-prices[0]
刚开始就买入股票,初始金钱是0,然后买入之后,就成-prices[0]
dp[0][1] = 0 刚开始没有任何操作 初始现金是0;
4.遍历数组
因为dp[i]都是由dp[i-1]推导出来的,所以我们由前向后遍历
分析完毕
上代码

代码

public int maxProfit(int[] prices) {//动态规划if(prices ==null || prices.length==0){return 0;}int n =prices.length;//dp[i][0]表示第i天持有股票//dp[i][1]表示第i天不持有股票int[][] dp =new int[n][2];//初始化//刚开始就买入股票,初始金钱是0,然后买入之后,就成-prices[0]dp[0][0]=-prices[0];dp[0][1] =0;//开始遍历数组for(int i=1;i<n;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[n-1][1];}

感谢大家的收看!!!
这种类型的其他例题请看
【java】力扣 买卖股票的最佳时机II

【java】力扣 买卖股票的最佳时机III

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

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

相关文章

USB协议详解

参考&#xff1a;USB协议详解_一个早起的程序员的博客-CSDN博客

RPC 的原理和示例

RPC&#xff08;远程过程调用&#xff09;是一种在不同计算机之间进行通信的技术&#xff0c;使得程序可以请求远程服务器上的服务就像调用本地服务一样。RPC抽象了网络通信的细节&#xff0c;让开发者能够更专注于实现业务逻辑。 为什么使用RPC&#xff1f; 抽象化通信过程&…

CentOS 7 Web面板的文件管理器说明

在使用CentOS 7 Web Panel&#xff08;CWP7&#xff09;时&#xff0c;偶尔要求在服务器曲面上修改&#xff0c;创建&#xff0c;编辑或删除文件。 最简单&#xff0c;最直接的方式是通过利用CWP7的内置文件管理器。 本文将详细介绍如何启动它&#xff0c;使用它&#xff0c;以…

利用OSMnx进行城市路网数据的速度与通行时间推算及分析

本文还是以广州市路网为例&#xff0c;通过osmmx调用ox.add_edge_speeds(G)时&#xff0c;该函数会遍历图G 中的每条边&#xff08;即每条街道&#xff09;&#xff0c;并基于一些预设的规则或街道属性&#xff08;如街道类型、是否为主要道路、是否有速度限制等&#xff09;来…

Golang | Leetcode Golang题解之第235题二叉搜索树的最近公共祖先

题目&#xff1a; 题解&#xff1a; func lowestCommonAncestor(root, p, q *TreeNode) (ancestor *TreeNode) {ancestor rootfor {if p.Val < ancestor.Val && q.Val < ancestor.Val {ancestor ancestor.Left} else if p.Val > ancestor.Val && q…

十五、【文本编辑器(一)】代码框架

目录 一、QMainWindow基本构成 二、项目框架代码 三、菜单与工具栏的实现 四、总结 一、QMainWindow基本构成 QMainWindow 是一个为用户提供主窗口程序的类&#xff0c;包含一个菜单栏 (menu bar)&#xff0c;多个工具栏(tool bars)&#xff0c;多个锚接部件 (dock widgets…

近源渗透简介

什么是近源渗透 通过乔装、社工等方式实地物理侵入企业办公区域&#xff0c;通过其内部各种潜在攻击面&#xff08;如Wi-Fi网络、RFID门禁、暴露的有线网口、USB接口等&#xff09;获得“战果”&#xff0c;最后以隐秘的方式将评估结果带出上报&#xff0c;由此证明企业安全防…

最新版康泰克完整版- Kontakt v7.10.5 for Win和Mac,支持m芯片和intel,有入库工具

一。世界最受欢迎的采样器的新篇章 Native Instruments Kontakt是采样器领域的标准&#xff0c;您将获得高质量的滤波器&#xff0c;在这里您将找到经典的模拟电路和最现代的滤波器。每一个都可以根据您的口味进行定制&#xff0c;并且由于它&#xff0c;您可以获得前所未有的声…

Ubuntu上卸载Nginx步骤操作

停止Nginx服务&#xff1a; sudo systemctl stop nginx删除Nginx软件包&#xff1a; sudo apt-get remove --purge nginx nginx-common这条命令会删除Nginx及其配置文件。 清理依赖项&#xff1a; sudo apt-get autoremove这会删除Nginx安装时可能安装的依赖项&#xff0c;…

debian12 允许远程ssh登录

1、查看ssh服务是否在运行 systemctl status ssh 如果没有安装ssh服务&#xff0c;可以通过以下命令安装&#xff1a; apt install openssh-server 如果服务没有运行&#xff0c;通过以下命令重启ssh服务&#xff1a; systemctl restart ssh 2、编辑配置文件 vim /etc/ss…

DROO论文笔记

推荐文章DROO源码及论文学习 读论文《Deep Reinforcement Learning for Online Computation Offloading in Wireless Powered Mobile-Edge Computing Networks》的笔记 论文地址&#xff1a;用于无线移动边缘计算网络在线计算卸载的深度强化学习 论文代码地址&#xff1a;DR…

数组去重(去重+单调栈 用boolen instack来去重

如果存到一个小的就把比它大的都pop出去&#xff0c;在后面还有的情况下&#xff0c;如果后面没有就不pop了 class Solution {public String removeDuplicateLetters(String s) {Stack<Character> stacknew Stack<>();int[] countnew int[256];boolean[] inStackn…

使用 Vue3、Node.js、MySQL、Electron 和 Express 实现用户登录、文章管理和截屏功能

在现代 Web 开发中&#xff0c;前后端分离的架构已经成为主流。本文将详细介绍如何使用 Vue3、Node.js、MySQL、Electron 和 Express 实现一个完整的用户登录、文章管理和截屏功能的应用。我们将从项目的初始化开始&#xff0c;逐步实现各个功能模块&#xff0c;并提供详细的代…

泰迪智能科技江西大数据实验室成功案例介绍说明

高校大数据实验室作为作为支撑高校人培方案实施的核心设施&#xff0c;实验室的建设一定要与学科建设、人才培养充分融合&#xff0c;是一个包含物理空间硬件资源软件资源课程内容的系统化工程。高校在实验室规划过程中&#xff0c;第一要务就是从学科定位出发、结合学校的特色…

14_Shell重定向输入输出

14_Shell重定向输入输出 输出重定向&#xff1a;一般情况&#xff0c;输出是在终端直接显示&#xff0c;改变输出位置&#xff0c;改变到文件中&#xff0c;这就是输出重定向 输入重定向&#xff1a;一般情况&#xff0c;输入是读取用户终端输入&#xff0c;改变输入位置&#…

图解PyTorch中的Transpose操作

在PyTorch中&#xff0c;我们时常会对张量进行转置操作。若张量是二维的&#xff0c;则非常容易理解。若张量维度更高&#xff0c;则会令人摸不到头脑。 高维张量究竟是怎么转置的&#xff1f;简单来说&#xff0c;就是将参与转置的维度抽出来&#xff0c;将内侧的子张量视为一…

js判断是否包含某些字符串中的一个

被判断的字符串是由逗号和中文拼接成的字符串&#xff0c; 编写一个js来校验一个字符串是否包含“纪委书记”&#xff0c;“纪检专岗”&#xff0c;“纪律检查室主任”&#xff0c;判断是否包含这三个字符串中的一个&#xff0c;包含其中一个就为true&#xff0c;多字少字都不算…

【C++PythonJava】字符处理详细解读_字符_ASCLL码_字母数字转换_算法竞赛_开发语言

文章目录 Beginning1&#xff09;ASCLL 码2&#xff09;大小比较2&#xff09;判断数字字符3&#xff09;字符、数字间的相互转换End Beginning 在 C 中&#xff0c;字符和整数有着密不可分的关系。原因就是在计算机中&#xff0c;字符是以一种较 ASCLL 码的整数存储的。自然&…

职业PDF标准 Python 下载器-CSDN

目的 下载技能人才评价网 - 职业技能标准查询系统 - PDF 打包下载 使用文件 a.json 代码解析 import base64 import requests import json import os import time# 读取JSON文件 with open(a.json, r, encodingutf-8) as f:data json.load(f) # 从名为 a.json 的文件中读…

【vue深入学习第1章】Vue.js 中的 Ajax 处理:vue-resource 库的深度解析

在现代前端开发中&#xff0c;Ajax 请求是与后端进行数据交互的关键技术。Vue.js 作为一个渐进式 JavaScript 框架&#xff0c;提供了多种方式来处理 Ajax 请求&#xff0c;其中 vue-resource 是一个较为常用的库。尽管 vue-resource 在 Vue 2.x 之后不再是官方推荐的 Ajax 处理…