代码随想录第46天|● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II

文章目录

  • ● 121. 买卖股票的最佳时机
    • 思路一:贪心(效率最快)
      • 代码:
    • 思路二:动态规划-dp数组
      • 代码:
    • 思路三:动态规划 常数储存
      • 代码:
  • ● 122.买卖股票的最佳时机II
    • 思路一:动态规划二维数组
      • 代码:
    • 思路二:动态规划常量
      • 代码:
    • 思路三:贪心
      • 代码:

● 121. 买卖股票的最佳时机

在这里插入图片描述

思路一:贪心(效率最快)

因为股票就买卖一次,那么贪心的想法很自然就是取最左最小值,取最右最大值,那么得到的差值就是最大利润。

代码:

class Solution {public int maxProfit(int[] prices) {// 找到一个最小的购入点int low = Integer.MAX_VALUE;// res不断更新,直到数组循环完毕int res = 0;for(int i = 0; i < prices.length; i++){low = Math.min(prices[i], low);res = Math.max(prices[i] - low, res);}return res;}

思路二:动态规划-dp数组

dp[i][0] 持有股票的最多现金
dp[i][0]=Math.max(dp[i-1][0],-prices[i])
dp[i][1] 不持有股票的最多现金
dp[i][1]=Math.max(dp[i-1][1],dp[i-1][0]+prices[i])
在这里插入图片描述

代码:

class Solution {public int maxProfit(int[] prices) {int n=prices.length;int[][] dp=new int[n][2];// 0持有股票 1不持有股票的现金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];}
}

思路三:动态规划 常数储存

代码:

class Solution {public int maxProfit(int[] prices) {int n=prices.length;int[] dp=new int[2];// 0持有股票 1不持有股票的现金dp[0]=-prices[0];dp[1]=0;for(int i=1;i<n;i++){int a=dp[0];dp[0]=Math.max(a,-prices[i]);dp[1]=Math.max(dp[1],a+prices[i]);}return dp[1];}
}

● 122.买卖股票的最佳时机II

在这里插入图片描述

思路一:动态规划二维数组

代码:

class Solution {public int maxProfit(int[] prices) {int[][] dp=new int[prices.length][2];// 0持有 1不持有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];}
}

思路二:动态规划常量

疑惑:为什么dp[1]和dp[0]更新了仍然不受影响?

代码:

// 优化空间
class Solution {public int maxProfit(int[] prices) {int[] dp = new int[2];// 0表示持有,1表示卖出dp[0] = -prices[0];dp[1] = 0;for(int i = 1; i <= prices.length; i++){// 前一天持有; 既然不限制交易次数,那么再次买股票时,要加上之前的收益dp[0] = Math.max(dp[0], dp[1] - prices[i-1]);// 前一天卖出; 或当天卖出,当天卖出,得先持有dp[1] = Math.max(dp[1], dp[0] + prices[i-1]);}return dp[1];}
}

思路三:贪心

递增(i>i-1)则代表可以在后面继续抛售,新的购入也是递增,则res前后两个区间都可以相加

代码:

// 贪心思路
class Solution {public int maxProfit(int[] prices) {int result = 0;for (int i = 1; i < prices.length; i++) {result += Math.max(prices[i] - prices[i - 1], 0);}return result;}
}

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

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

相关文章

微信小程序(四十九)拦截器处理登入失败情况

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.拦截器判断处理失败与成功的情况 2.使用拦截器拒绝失败的情况&#xff0c;使网络请求后面的逻辑步骤不会执行 源码&#xff1a; index.wxml <button type"primary" bind:tap"onSubmit"…

Java面试题总结200道(二)

26、简述Spring中Bean的生命周期&#xff1f; 在原生的java环境中&#xff0c;一个新的对象的产生是我们用new()的方式产生出来的。在Spring的IOC容器中&#xff0c;将这一部分的工作帮我们完成了(Bean对象的管理)。既然是对象&#xff0c;就存在生命周期&#xff0c;也就是作用…

C#,无监督的K-Medoid聚类算法(K-Medoid Algorithm)与源代码

1 K-Medoid算法 K-Medoid&#xff08;也称为围绕Medoid的划分&#xff09;算法是由Kaufman和Rousseeuw于1987年提出的。中间点可以定义为簇中的点&#xff0c;其与簇中所有其他点的相似度最小。 K-medoids聚类是一种无监督的聚类算法&#xff0c;它对未标记数据中的对象进行聚…

【DIY】超重低音耳机放大器的制作

这不是一款普通的耳机放大器&#xff0c;我在它前级加入低音提升电路后&#xff0c;可以让你使用耳机听到高保真的音响效果&#xff0c;特别是重低音效果&#xff0c;逼真感很强以至于用它听的时间长了会让人感到头晕&#xff0c;使用它必须得注意&#xff1a;你的耳机要能经得…

文心一言 VS 讯飞星火 VS chatgpt (207)-- 算法导论15.4 4题

四、说明如何只使用表 c 中 2*min(m&#xff0c;n) 个表项及O(1)的额外空间来计算LCS的长度。然后说明如何只用 min(m&#xff0c;n) 个表项及O(1)的额外空间完成相同的工作。要写代码的时候&#xff0c;请用go语言。 文心一言&#xff1a; 在只使用 2 * min(m, n) 个表项和 …

MySQL高可用性攻略:快速搭建MySQL主从复制集群 !

MySQL高可用性攻略&#xff1a;快速搭建MySQL主从复制集群 &#xff01; MySQL基础知识&#xff1a;介绍MySQL数据库的基本概念和常用命令&#xff0c;如何创建数据库、表、用户和权限管理等。 MySQL安装教程&#xff1a;Centos7 安装MySQL5.7.29详细安装手册 MySQL数据类型&…

页面布局与样式设计:从基础到进阶

✨✨祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一. 基础布局技巧 1.使用CSS Grid布局设计网页布局 1.1 创建网格容器 1.2. 定义…

Unity 常用的4种灯光、制作镜子、灯光的调用修改数值、

创建灯光时&#xff0c;一般用4种&#xff1a;定向光、点光源、聚光、区域光、 定向光&#xff1a;太阳 点光源&#xff1a;灯泡 聚光灯&#xff1a;手电筒 区域光&#xff1a;烘焙-贴图 灯光选择已烘焙 需要先选择被烘焙的物体&#xff0c;然后再选择Contribute GI 等待进…

Spring框架精髓:带你手写IoC

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

Elasticsearch:如何创建搜索引擎

作者&#xff1a;Jessica Taylor 搜索引擎是生活中我们认为理所当然的事情之一。 每当我们寻找某些东西时&#xff0c;我们都会将一个单词或短语放入搜索引擎&#xff0c;就像魔术一样&#xff0c;它会为我们提供一个匹配结果列表。 现在可能感觉不那么神奇了&#xff0c;因为这…

将编译好的FFmpeg导入iOS项目使用(swift)

1. 将ffmpeg 拖入工程并添加search Paths路径 2.添加所需的framework和lib AudioToolbox.framework&#xff0c;CoreMedia.framework&#xff0c;libbz2&#xff0c;libbz&#xff0c;libiconv&#xff0c;VideoToolbox.framework 3.使用 在桥接header中引入头文件

rt thread stdio如何同时生成bin和hex

一、rt thread stdio默认生成bin文件&#xff1a; rt thread stdio 软件编译时&#xff0c;默认生成bin文件&#xff1b; 二、rt thread stdio如何同时生成bin和hex 右键单击-->项目-->属性-->C/C构建-->设置-->构建步骤-->(构建后步骤)命令&#xff1a; …