当前位置: 首页 > news >正文

【CT】LeetCode手撕—121. 买卖股票的最佳时机

目录

  • 题目
  • 1- 思路
  • 2- 实现
    • ⭐121. 买卖股票的最佳时机——题解思路
  • 2- ACM实现

题目

  • 原题连接:121. 买卖股票的最佳时机

1- 思路

模式识别

  • 模式1:只能某一天买入 ——> 买卖一次 ——> dp 一次的最大利润

动规五部曲

  • 1.定义dp数组,确定含义
    • dp[i][0] :第 i 天持有股票的最大收益
    • dp[i][1] :第 i 天没有股票的最大收益
  • 2.递推公式
    • 第 i 天持有股票 dp[i][0]
      • i-1天就持有股票,那么就保持现状,所得现金就是昨天持有股票的所得现金 即:dp[i - 1][0]
      • i天买入股票,所得现金就是买入今天的股票后所得现金即:-prices[i]
    • dp[i][0] = Math.max(dp[i - 1][0],-prices[i])
    • 第 i 天没有股票 dp[i][1]
      • i-1 天就没有股票 即 dp[i-1][1]
      • i-1 天有,第 i 天卖了 dp[i-1][0]+prices[i]
    • dp[i][1] = Math.max(dp[i-1][1],dp[i-1][0]+prices[i])
  • 3.初始化
    • 第一天持有 dp[0][0] = -prices[i]、第一天没有 dp[0][1] = 0
  • 4.遍历顺序
    • 推导顺序为 从左到右 ,因此 i=1i<len

2- 实现

⭐121. 买卖股票的最佳时机——题解思路

在这里插入图片描述

class Solution {public int maxProfit(int[] prices) {//1.定义 dp 数组// dp[i][0] 持有// dp[i][1] 没有int len = prices.length;int[][] dp = new int[len][2];//2.递推公式// 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]);// 3. 初始化dp[0][0] = -prices[0];dp[0][1] = 0;//3.遍历顺序for(int i = 1 ; i < len;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[len-1][1];}
}

2- ACM实现

public class bestTime {public static int maxProfit(int[] prices){// 1. 定义dp数组// dp[i][0] 持有// dp[i][1] 没有int len = prices.length;int[][] dp = new int[len][2];// 2.递推公式// 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]);// 3. 初始化dp[0][0] = -prices[0];dp[0][1] = 0;//4.遍历for(int i = 1 ; i < len;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[len-1][1];}public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("输入股价数组长度");int n = sc.nextInt();int[] prices = new int[n];System.out.println("输入数组值");for(int i = 0 ; i < n;i++){prices[i] = sc.nextInt();}System.out.println("最大利润为"+maxProfit(prices));}
}

相关文章:

  • 在不使用js在情况下只用css实现瀑布流效果
  • 速盾:cdn加速怎么计费?
  • 二刷算法训练营Day29 | 回溯算法(5/6)
  • SortTable.js + vxe-table 实现多条批量排序
  • 第 4 章:从 Spring Framework 到 Spring Boot
  • PyCharm设置不默认打开上次的项目
  • Android 调用系统相册、系统相机拍照
  • MyBatis进行模糊查询时SQL语句拼接引起的异常问题
  • kubeadm快速部署K8S
  • 长亭雷池部署
  • 【云岚到家】-day03-1-门户等缓存方案选择
  • Django DetailView视图
  • 如何将NextJs中的File docx保存到Prisma ORM
  • 奇思妙想-可以通过图片闻见味道的设计
  • 数据网格和视图入门
  • 深入了解以太坊
  • [PHP内核探索]PHP中的哈希表
  • [deviceone开发]-do_Webview的基本示例
  • Angular6错误 Service: No provider for Renderer2
  • C语言笔记(第一章:C语言编程)
  • HTML5新特性总结
  • JavaWeb(学习笔记二)
  • Koa2 之文件上传下载
  • mac修复ab及siege安装
  • nginx 负载服务器优化
  • npx命令介绍
  • PHP CLI应用的调试原理
  • Spring-boot 启动时碰到的错误
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 高度不固定时垂直居中
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 记一次用 NodeJs 实现模拟登录的思路
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 通过npm或yarn自动生成vue组件
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 微信小程序填坑清单
  • 协程
  • 学习笔记:对象,原型和继承(1)
  • 用Canvas画一棵二叉树
  • (02)Hive SQL编译成MapReduce任务的过程
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (NSDate) 时间 (time )比较
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)JAVA使用POI操作excel
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (四)c52学习之旅-流水LED灯
  • (转)负载均衡,回话保持,cookie
  • .net Stream篇(六)
  • .NET 设计模式初探
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .net流程开发平台的一些难点(1)
  • /bin、/sbin、/usr/bin、/usr/sbin
  • :如何用SQL脚本保存存储过程返回的结果集
  • @Import注解详解