leetcode 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。

下面谈谈本人的心路历程:

上来就做。心想,凭w暴力小子的身份,这点问题还是没问题的。第一遍题解如下:

class Solution {public int maxProfit(int[] prices) {int res = 0;// 初始化赋值int temp = 0;// 代表最大利润// 初始化赋值for (int i = 0; i < prices.length; i++) {// i代表被假设的最低价格for (int j = i; j < prices.length; j++) {// j代表被假设的最高价格if (prices[j] > prices[i]) {temp = prices[j] - prices[i];// 更新最大利润if (temp > res) {res = temp;// 更新最大利润}}}}return res;}
}

直接运行,ok没问题。然后提交。。。结果系统判定超时了。。。

也难怪,for了两次,O(n^2)时间复杂度,确实有超时的风险。

然后就是优化了,这一部分思考了很久,先把代码贴出来:

class Solution {public int maxProfit(int[] prices) {int minPrice = Integer.MAX_VALUE;// 初始化赋值int maxProfit = 0;// 初始化赋值for (int i : prices) {if (i < minPrice) {minPrice = i;// 更新最低价格} else {if (i - minPrice > maxProfit) {maxProfit = i - minPrice;// 更新最大利润}}}return maxProfit;}
}

简单说说思路:

最初的实现有两个嵌套的循环,每个循环都会遍历数组。那么可不可以通过“一次遍历”或“贪心算法”的方法去实现呢?

当然是可以的

在股票买卖问题中,最重要的的策略就是“低买高卖”。

因此,我们可以在遍历数组的同时,保持追踪最低价格和到目前为止的最大利润。当发现一个更高的价格时,便可以计算当前价格与最低价格之间的差值,并更新最大利润。如果当前价格比最低价格还低,那么就更新最低价格。

最后,这个算法的时间复杂度是 O(n),因为它只遍历了一次数组。

至此,这个问题正式结束。

如果你有问题,或者意见及建议,欢迎评论沟通!

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

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

相关文章

java面试(消息队列MQ)

MQ有什么用&#xff1f;有哪些场景&#xff1f; MQ&#xff08;MessageQueue&#xff09;消息队列。队列&#xff08;FIFO&#xff09;先进先出的数据结构&#xff0c;消息由生产者发送到MQ&#xff0c;后由消费者对消息进行处理。QQ&#xff0c;微信就是MQ场景。 MQ作用&…

搜索准确性提升 20%,Jina Reranker 成为 RAG 优化的新标杆!

在整合大型语言模型&#xff08;LLM&#xff09;到业务流程时&#xff0c;企业经常会遇到一些头疼的问题&#xff0c;比如怎样保持数据时效性、避免幻觉现象&#xff0c;以及如何保护数据安全等等。为了解决这些问题&#xff0c;检索增强生成&#xff08;RAG&#xff09;技术应…

盘点国内大厂的10个AI创作工具,看看你都用过哪些?

国内大厂的 AI 创作工具&#xff0c;目前已经非常多了&#xff0c;而且有很多都是大家耳熟能详的。 下面整理了一些&#xff0c;包含 AI 绘画、AI 视频、AI 智能体、AI 大模型等多个方向的国内大厂 AI 创作工具。 发现有几款 AI 工具&#xff0c;还真的非常好用。看看这些 AI…

如何改变ByteBuf里面的内容

前言 这两天学习Moquette&#xff0c;对ByteBuf做了点研究&#xff0c;对于maxCapacity有了进一步了解。 一、ByteBuf是什么&#xff1f; 最早是在netty中有接触&#xff0c;这算是是核心了&#xff0c;有很多文章进行介绍&#xff1a; Netty(7)源码-ByteBufJava ByteBuf 写…

深入浅出Redis(三):Redis数据的存储、删除以及淘汰

引言 Redis是一款基于键值对的数据结构存储系统&#xff0c;它的特点是基于内存操作、单线程处理命令、IO多路复用模型处理网络请求、键值对存储与简单丰富的数据结构等等 本篇文章不像以往文章围绕Redis某个特点来讲解&#xff0c;而是作为过渡介绍&#xff0c;来说一说Redi…

基于springboot的大型商场应急预案管理系统论文

大型商场应急预案管理系统 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了大型商场应急预案管理系统的开发全过程。通过分析大型商场应急预案管理系统管理的不足&#xff0c;创建了一个计算机管理大型商场应急…

c语言中的likely 与 unlikely使用

__builtin_expect 是 GCC 编译器提供的一个内建函数&#xff0c;用于帮助编译器优化条件跳转&#xff0c;提升程序的运行效率。 __builtin_expect 接收两个参数&#xff0c;如 __builtin_expect(EXP, N)&#xff0c;其含义是 EXP N 的概率很大。也就是说&#xff0c;这个函数…

软件测试开发环境、测试环境、准生产环境、生成环境

在一个项目开发到发布的整个过程中&#xff0c;会使用到很多个环境进行测试和运行项目。最基本的开发环境、测试环境、准生产环境、生成环境 一、开发环境 开发环境顾名思义就是我们程序猿自己把项目放到自己的电脑上&#xff0c;配置好以后&#xff0c;跑起来项目&#xff0…

如何器测试IP池的质量?代理IP是怎么在问卷调查中应用的呢?

在数字时代&#xff0c;数据收集和分析变得日益重要&#xff0c;而问卷调查作为一种常见的数据收集工具&#xff0c;其效率和准确性直接影响着研究的可信度和有效性。为了实现这一目标&#xff0c;代理IP在问卷调查中的应用变得愈发关键。本文旨在探讨如何测试IP池的质量&#…

【InternLM 实战营笔记】LMDeploy量化internlm2-chat-20b模型

准备环境 拉取环境 /root/share/install_conda_env_internlm_base.sh lmdeploy激活环境 conda activate lmdeploy安装依赖库 # 解决 ModuleNotFoundError: No module named packaging 问题 pip install packaging # 使用 flash_attn 的预编译包解决安装过慢问题 pip instal…

真机测试——关于荣耀Magic UI系列HBuilder真机调试检测不到解决办法

​​​​​出现这种状况怎么办 1、开启USB调试 2、重点来了——我们要选择USB配置&#xff0c;选择音频来源 3、连接OK

95.Go设计优雅的错误处理(带堆栈信息)

在之前的两篇文章中&#xff0c;我们已经介绍过错误的一些优雅处理 75.错误码设计、实现统一异常处理和封装统一返回结果 88.Go设计优雅的错误处理 本文想继续写一篇&#xff0c;可以作为工具包直接使用。也是记录一种新的思路和编码技巧&#xff0c;同时创建错误的时候会自动…

vue3基础教程(2)——创建vue3+vite项目

博主个人微信小程序已经上线&#xff1a;【中二少年工具箱】。欢迎搜索试用 正文开始 专栏简介1. 前言2.node版本检测3.创建vue项目 专栏简介 本系列文章由浅入深&#xff0c;从基础知识到实战开发&#xff0c;非常适合入门同学。 零基础读者也能成功由本系列文章入门&#x…

javascript数组排序的方法

目录 基本用法 按照数字大小排序 按照降序排序 按照字符串长度排序 按照对象属性排序 在JavaScript中&#xff0c;数组排序通常使用Array.prototype.sort()方法。这个方法会按照指定的顺序对数组的元素进行排序&#xff0c;并返回排序后的数组。如果未指定比较函数&#x…

Springboot配置MySQL数据库

Springboot配置MySQL数据库 一、创建springboot项目&#xff0c;并添加如下依赖 <dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope> </dependency>二、在applica…

基于springboot+vue的酒店管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

实现session共享的方法总结完整版

文章目录 实现session共享的方法总结完整版1、使用共享数据库&#xff1a;2、使用粘性会话&#xff08;Sticky Session&#xff09;&#xff1a;3、使用缓存系统&#xff1a;4、使用分布式文件系统&#xff1a;5、使用中央认证服务&#xff1a;6、使用会话复制&#xff1a;7、使…

MongoDB聚合运算符:$dateFromParts

文章目录 语法使用值域值大于范围值小于范围时区 举例 语法 {$dateFromParts : {year: <year>, month: <month>, day: <day>,hour: <hour>, minute: <minute>, second: <second>,millisecond: <ms>, timezone: <tzExpression>…

100%开源大模型OLMo:代码/权重/数据集/训练全过程公开,重定义AI共享

前言 近日&#xff0c;艾伦人工智能研究所联合多个顶尖学术机构发布了史上首个100%开源的大模型“OLMo”&#xff0c;这一举措被认为是AI开源社区的一大里程碑。OLMo不仅公开了模型权重&#xff0c;还包括了完整的训练代码、数据集和训练过程&#xff0c;为后续的开源工作设立…

三星成功研发出业界首款12层堆叠HBM3E

三星电子有限公司成功研发出业界首款12层堆叠HBM3E DRAM——HBM3E 12H&#xff0c;这是迄今为止容量最大的HBM产品。这款新型HBM3E 12H内存模块提供了高达1,280GB/s的史上最高带宽&#xff0c;并拥有36GB的存储容量&#xff0c;相较于之前的8层堆叠HBM3 8H&#xff0c;在带宽和…