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 间隙锁防止幻读 主索引是聚簇索引 内部做了很多…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...

力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...

关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...
用js实现常见排序算法
以下是几种常见排序算法的 JS实现,包括选择排序、冒泡排序、插入排序、快速排序和归并排序,以及每种算法的特点和复杂度分析 1. 选择排序(Selection Sort) 核心思想:每次从未排序部分选择最小元素,与未排…...