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),因为它只遍历了一次数组。
至此,这个问题正式结束。
如果你有问题,或者意见及建议,欢迎评论沟通!
相关文章:
leetcode 121.买卖股票的最佳时机
声明:以下仅代表个人想法,非官方答案或最优题解! 题目: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的…...
javaWebssh酒店客房管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计
一、源码特点 java ssh酒店客房管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0…...
vue3基础教程(2)——创建vue3+vite项目
博主个人微信小程序已经上线:【中二少年工具箱】。欢迎搜索试用 正文开始 专栏简介1. 前言2.node版本检测3.创建vue项目 专栏简介 本系列文章由浅入深,从基础知识到实战开发,非常适合入门同学。 零基础读者也能成功由本系列文章入门&#x…...
部署DNS 实战篇
二、DNS 部署 环境介绍 服务器3台、系统centos 安装软件 yum install -y bind bind-utils bind-chrootbind 主包bind-utils 客户端测试工具(host 、dig 、nslookup)bind-chroot chroot环境 禁锢dns服务器的工作目录caching-nameserver(rhel5提供…...
2023 2024年全国职业院校技能大赛中职组网络建设与运维赛项服务器Linux部分教程解析
欢迎合作 需要资料请私 Rocky 9 包含各种常考服务(包括新题型KVM等)...
Flask g对象和插件
四、Flask进阶 1. Flask插件 I. flask-caching 安装 pip install flask-caching初始化 from flask_cache import Cache cache Cache(config(CACHE_TYPE:"simple" )) cache.init_app(appapp)使用 在视图函数上添加缓存 blue.route("/") cache.cached(tim…...
26、Qt调用.py文件中的函数
一、开发环境 Qt5.12.0 Python3.7.8 64bit 二、使用 新建一个Qt项目,右击项目名称,选择“添加库” 选择“外部库”,点击“下一步” 点击“浏览”,选择Python安装目录下的libs文件夹中的“python37.lib”文件,点击“下…...
计算机网络实验一 网线制作
实验目的与要求: 实验目的 了解以太网网线(双绞线)和制作方法 实验内容 了解网线和水晶头 学习网线制作方法 实验环境和要求 网线 水晶头 压线钳 剥线钳 网线测试器 方法、步骤: 步骤一 准备工具和材料 步骤二 剥掉双绞线的外…...
android TextView 实现富文本显示
android TextView 实现富文本显示,实现抖音直播间公屏消息案例 使用: val tvContent: TextView helper.getView(R.id.tvContent)//自己根据UI业务要求,可以控制 图标显示 大小val levelLabel MyImgLabel( bitmap 自己业务上的bitmap )va…...
Linux常用命令(超详细)
一、基本命令 1.1 关机和重启 关机 shutdown -h now 立刻关机 shutdown -h 5 5分钟后关机 poweroff 立刻关机 重启 shutdown -r now 立刻重启 shutdown -r 5 5分钟后重启 reboot 立刻重启 1.2 帮助命令 –help命令 shutdown --help: ifconfig --help:查看…...
软考笔记--基于架构的软件开发方法
一.体系架构的设计方法概述 基于体系结构的软件设计方法ABSD是由体系结构驱动的,即指有构成体系结构的商业、质量和功能需求的组合驱动的。ABSD方法有3个基础。第1个基础是功能的分解。在功能分解中,ABSD方法使用已有的基于模块的内聚和耦合技术。第2个…...
CSS 盒子模型(box model)
概念 所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:外边距(margin),边框(border),内边距(pad…...
基于springboot+vue的在线考试系统
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 主要内容:毕业设计(Javaweb项目|小程序|Pyt…...
001 概述
什么是API API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。为了…...
linux环境下nginx的配置文件
根据指定的域名进行反向代理转发,实现负载均衡 Nginx的upstream支持如下六种方式的分配算法,分别是: 轮询 默认方式 weight 权重方式 ip_hash 依据ip分配方式 least_conn 依据最少连接方式 url_hash 依据URL分配方式 fair 依据响应时间…...
AcWing:1236. 递增三元组
给定三个整数数组 A[A1,A2,…AN] B[B1,B2,…BN] C[C1,C2,…CN] 请你统计有多少个三元组 (i,j,k) 满足: 1≤i,j,k≤NAi<Bj<Ck 输入格式 第一行包含一个整数 N。 第二行包含 N 个整数 A1,A2,…AN。 第三行包含 N 个整数 B1,B2,…BN。 第四行包含 N 个整…...
关于并网继电器的继电器自检逻辑及实现方式
需求 对于常规的光伏并网逆变器来说,继电器控制至关重要。继电器一般位于逆变电感后,共模电感前,用于将逆变电压与电网电压脱开,一般国外有双继电器的安规强制认证要求,国内目前只需要单继电器要求(后续应…...
Spring中的事务和事务的传播机制
事务是一组操作的集合,不可以被分割。事务会把所有的操作作为一个整体,这组操作要么全部成功,要么全部失败。 事务有三种操作: 开启事务;提交事务;回滚事务。 如果代码的执行逻辑是这样: 开…...
前端【技术类】资源学习网站整理(那些年的小网站)
学习网站整理 值得分享的视频博主:学习网站链接 百度首页的资源收藏里的截图(排列顺序没有任何意义,随性而已~),可根据我标注的关键词百度搜索到这些网站呀,本篇末尾会一一列出来,供大家学习呀 …...
MySQL——存储引擎
存储引擎 InnoDB 是 MySQL 默认的存储引擎,只有在需要它不支持的特性时,才会考虑其他存储引擎 实现了 4 个标准的隔离级别,默认级别可重复度。在可重复度隔离级别下,通过 MVCC 间隙锁防止幻读 主索引是聚簇索引 内部做了很多…...
宝塔部署前后端时,配置域名与ssl证书
创建文件夹1.后端部署部署之后点击设置这步骤最关键# HTTP反向代理相关配置开始 >>>location ~ /purge(/.*) {proxy_cache_purge cache_one $Host$request_uri$is_args$args;}location / {proxy_pass http://127.0.0.1:8773;proxy_set_header Host $Host:$server_port…...
MeteorSeed
从0构建WAV文件:读懂计算机文件的本质 虽然接触计算机有一段时间了,但是我的视野一直局限于一个较小的范围之内,往往只能看到于算法竞赛相关的内容,计算机各种文件在我看来十分复杂,认为构建他们并能达到目的是一件困难…...
Symfony Monolog Bundle与现代日志系统:Sentry、Elasticsearch、Slack集成终极指南
Symfony Monolog Bundle与现代日志系统:Sentry、Elasticsearch、Slack集成终极指南 【免费下载链接】monolog-bundle Symfony Monolog Bundle 项目地址: https://gitcode.com/gh_mirrors/mo/monolog-bundle Symfony Monolog Bundle是Symfony框架中功能强大的…...
M24LR64E-R双接口NFC标签驱动与嵌入式集成指南
1. 项目概述NFC Tag M24LR6E 是一款面向嵌入式系统的 Arduino 兼容库,专为驱动 Seeed Studio 推出的 Grove - NFC Tag 模块而设计。该模块核心芯片为 STMicroelectronics 的 M24LR64E-R,是一款高度集成的双接口(IC RF)近场通信标…...
嵌入式面试最重要的是项目经历
很多嵌入式应届生面试,我发现大家都挂在同一个地方 项目一开口,就让人听不下去了。 不是项目太少,而是项目太普通。 不是完全没做,而是讲不出自己到底做了什么。 不是技术栈不对,而是没法证明你的能力真的能落到工作里…...
OpenClaw长任务优化:Qwen3-32B本地接口降低Token消耗实测
OpenClaw长任务优化:Qwen3-32B本地接口降低Token消耗实测 1. 为什么需要关注长任务Token消耗 去年冬天,当我第一次用OpenClaw整理全年积累的2000多份PDF文档时,账单上的API费用让我倒吸一口凉气——这个简单的文件分类任务竟然消耗了价值30…...
电源防反接电路设计与工程实践
1. 电源防反接电路的必要性在工业自动化和嵌入式系统设计中,电源接反是一个常见但危害极大的问题。不同于消费电子产品使用标准化接口,许多工业设备需要现场接线,操作人员稍有不慎就可能接错电源极性。我曾参与过一个煤矿监控系统的项目&…...
BLE HID库:嵌入式设备实现HID-over-GATT的轻量级方案
1. BLE_HID 库概述:面向嵌入式设备的 HID-over-GATT 实现BLE_HID 是一个专为资源受限嵌入式平台设计的轻量级开源库,其核心目标是将传统 USB HID(Human Interface Device)协议栈无缝迁移至 Bluetooth Low Energy(BLE&a…...
2026届学术党必备的五大AI辅助写作网站推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在当下这个学术写作的场景范围里,论文AI工具已然变成辅助研究者去完成文献梳理的…...
深入SimpleFOC源码:为什么校准编码器时要将磁场固定在270度?一个硬件角度的解读
深入SimpleFOC源码:为什么校准编码器时要将磁场固定在270度?一个硬件角度的解读 当你第一次接触SimpleFOC库的编码器校准代码时,可能会对其中将电角度锁定在270度(_3PI_2)的操作感到困惑。这个看似随意的"魔法数字…...
