【LeetCode】121. 买卖股票的最佳时机
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。
提示:
1 <= prices.length <= 10^50 <= prices[i] <= 10^4
个人题解
方法一:模拟
思路:遍历数组记录当前最小值,且每次比最小值小时都重置最大值,因为大的值只能在最小值的右边找,比较最大最小值的差值,当大于前面记录的最大差值时才替换当前最大差值,这个最大差值即最后要返回的结果
class Solution {public int maxProfit(int[] prices) {int min = Integer.MAX_VALUE;int max = -1;int result = 0;for (int i = 0; i < prices.length; i++) {if (prices[i] < min) {min = prices[i];max = -1;} else if (prices[i] > max) {max = prices[i];result = Math.max(max - min, result);}}return result;}
}
复杂度分析
- 时间复杂度:O(n)
- 空间复杂度:O(1)
官方题解:
我们需要找出给定数组中两个数字之间的最大差值(即,最大利润)。此外,第二个数字(卖出价格)必须大于第一个数字(买入价格)。
形式上,对于每组 i 和 j (其中 i > j)我们需要找出 max(prices[j] - prices[i])
方法一:暴力法【超时】
public class Solution {public int maxProfit(int[] prices) {int maxprofit = 0;for (int i = 0; i < prices.length - 1; i++) {for (int j = i + 1; j < prices.length; j++) {int profit = prices[j] - prices[i];if (profit > maxprofit) {maxprofit = profit;}}}return maxprofit;}
}
复杂度分析
- 时间复杂度:O(n^2)
- 空间复杂度:O(1)
方法二:一次遍历
public class Solution {public int maxProfit(int prices[]) {int minprice = Integer.MAX_VALUE;int maxprofit = 0;for (int i = 0; i < prices.length; i++) {if (prices[i] < minprice) {minprice = prices[i];} else if (prices[i] - minprice > maxprofit) {maxprofit = prices[i] - minprice;}}return maxprofit;}
}
复杂度分析
- 时间复杂度:O(n)
- 空间复杂度:O(1)
作者:力扣官方题解
链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/solutions/136684/121-mai-mai-gu-piao-de-zui-jia-shi-ji-by-leetcode-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章:
【LeetCode】121. 买卖股票的最佳时机
121. 买卖股票的最佳时机 难度:简单 题目 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获…...
Vue3-VueRouter4路由语法解析
1.创建路由实例由createRouter实现 2.路由模式 1)history模式使用createWebHistory():地址栏不带# 2)hash模式使用createWebHashHistory():地址栏带# 3)参数是基础路径,默认/ 括号里的就是设置路径的前…...
ChromeDriver最新版本下载与安装方法
关于ChromeDriver最新下载地址:https://googlechromelabs.github.io/chrome-for-testing/ 下载与安装 setp1:查看Chrome浏览器版本 首先,需要检查Chrome浏览器的版本。请按照以下步骤进行: 打开Chrome浏览器。 点击浏览器右上角…...
illuminate/database 使用 四
文档:Hyperf Database: Getting Started - Laravel 10.x - The PHP Framework For Web Artisans 因为hyperf使用illuminate/database,所以按照文章,看illuminate/database代码实现。 一、读写分离 根据文档读写的host可以分开。设置读写分…...
Spring面向切面编程(AOP);Spring控制反转(IOC);解释一下Spring AOP里面的几个名词;Spring 的 IoC支持哪些功能
文章目录 Spring面向切面编程(AOP)什么是AOPSpring AOP and AspectJ AOP 的区别?Spring AOP中的动态代理如何理解 Spring 中的代理?解释一下Spring AOP里面的几个名词Spring在运行时通知对象Spring切面可以应用5种类型的通知:什么是切面 Aspe…...
vatee万腾的科技征途:Vatee独特探索的数字化力量
在数字化时代的浪潮中,Vatee万腾以其独特的科技征途成为引领者。公司在数字化领域的探索之路不仅是技术的创新,更是一种对未知的勇敢涉足,是对新时代的深刻洞察和积极实践。 Vatee万腾通过独特的探索,展示了在数字化征途上的创新力…...
MySQL学习day03
一、SQL图形化界面工具 常用比较常用的图形化界面有sqlyog、mavicat、datagrip datagrip工具使用相当方便,功能比前面两种都要强大。 DataGrip工具的安装和使用请查看这篇文档:DataGrip 安装教程 DML-介绍 DML全称是Data Manipulation Language(数据…...
《QT从基础到进阶·三十七》QWidget实现左侧导航栏效果
NavigationBarPlugin插件类实现了对左侧导航栏的管理,我们可以在导航栏插件中添加界面,并用鼠标点击导航栏能够切换对应的界面。 源码在文章末尾 实现效果如下: NavigationBarPlugin实现的接口如下: class NAVIGATIONBAR_EXP…...
sftp学习
什么是sftp? sftp的简单操作 远程连接 int RobostSftp::Init(QString ip,QString port,QString user_name, QString user_password) { int rc;session ssh_new();if (!session) {fprintf(stderr, "ssh initialization failed\n");// return 1…...
C++之STL库:string类(用法列举和总结)
前言 大家在学习STL库的时候一定要学会看英文文档,俗话说熟能生巧,所以还得多练!在使用string类之前,要包含头文件#include <string>和using namespace std; 文档链接:string - C Reference 一、string——构造…...
小程序中的大道理--综述
前言 以下将用一个小程序来探讨一些大道理, 这些大道理包括可扩展性, 抽象与封装, 可维护性, 健壮性, 团队合作, 工具的利用, 可测试性, 自顶向下, 分而治之, 分层, 可读性, 模块化, 松耦合, MVC, 领域模型, 甚至对称性, 香农的信息论等等. 为什么不用大程序来说大道理呢? …...
tlais智能学习辅助系统-修改部门功能实现
学习黑马程序员的JavaWeb课程,自己写的部门信息修改部分程序 控制层: //DeptController.java /** * 根据ID查询部门信息 * param id * return */ GetMapping("/{id}") public Result select(PathVariable Integer id){log.info("查询id…...
GLM: 自回归空白填充的多任务预训练语言模型
当前,ChatGLM-6B 在自然语言处理领域日益流行。其卓越的技术特点和强大的语言建模能力使其成为对话语言模型中的佼佼者。让我们深入了解 ChatGLM-6B 的技术特点,探索它在对话模型中的创新之处。 GLM: 自回归空白填充的多任务预训练语言模型 ChatGLM-6B 技…...
函数递归所应满足的条件
1.递归的概念 递归是学习C语⾔函数绕不开的⼀个话题,那什么是递归呢? 递归其实是⼀种解决问题的⽅法,在C语⾔中,递归就是函数⾃⼰调⽤⾃⼰。 递归的思想: 把⼀个⼤型复杂问题层层转化为⼀个与原问题相似,但…...
Python入职某新员工大量使用Lambda表达式,却被老员工喷是屎山
Python中Lambda表达式是一种简洁而强大的特性,其在开发中的使用优缺点明显,需要根据具体场景权衡取舍。 Lambda表达式的优点之一是它的紧凑语法,适用于一些短小而简单的函数。这种形式使得代码更为精炼,特别在一些函数式编程场景中,Lambda表达式可以提高代码的表达力。此外…...
Android Bitmap保存成至手机图片文件,Kotlin
Android Bitmap保存成至手机图片文件,Kotlin fun saveBitmap(name: String?, bm: Bitmap) {val savePath Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString()if (!Files.exists(Paths.get(savePath))) {Log.d("保存文…...
frp V0.52.3 搭建
下载 https://github.com/fatedier/frp/releases/ 此版本暂时没有windows的,想在windows使用请下载v0.52.2 简易搭建 frps.toml的配置文件,以下12000、8500需要在云服务器中的防火墙中开放tcp # bindPort为frps和frpc通信的端口,需要在防…...
最近数据分析面试的一点感悟...
我是阿粥,也是小z 最近面了不少应届的同学(数据分析岗位),颇有感触,与各位分享。 简历可以润色,但要适度 运用一些原则,如STAR法则,让简历逻辑更清晰,条块分明࿰…...
ZYNQ_project:IIC_EEPROM
EEPROM简介: EEPROM(Electrically Erasable Progammable Read Only Memory, E2PROM)是指带电可擦可编程只读存 储器,是一种常用的非易失性存储器(掉电数据不丢失), E2PROM 有多种类型的产品,我…...
Leetcode 2940. Find Building Where Alice and Bob Can Meet
Leetcode 2940. Find Building Where Alice and Bob Can Meet 1. 解题思路2. 代码实现3. 算法优化 题目链接:2940. Find Building Where Alice and Bob Can Meet 1. 解题思路 这一题本质上又是限制条件下求极值的问题,算是我最不喜欢的题目类型之一吧…...
算法面试常见题型分类
算法面试常见题型分类指南 在技术面试中,算法能力是考察候选人逻辑思维和问题解决能力的重要环节。无论是校招还是社招,算法题往往是筛选候选人的关键门槛。掌握常见的题型分类,能够帮助面试者高效准备,提升解题能力。本文将介绍…...
别再只做静态分析了!DPABI滑动窗动态功能连接教程,解锁小鼠脑网络时间奥秘
动态功能连接分析实战:从静态网络到时间维度的大脑活动解码 在神经影像研究领域,静息态功能磁共振成像(rs-fMRI)已成为探索大脑内在功能组织的核心工具。传统静态功能连接分析虽然揭示了脑区间的稳定关联模式,却忽视了大脑活动随时间变化的动…...
别让行业限制你!2026手握这10个高含金量证书,金融/互联网/制造随便挑!
高含金量证书推荐在职业发展中,证书是提升竞争力的重要工具。无论金融、互联网还是制造业,以下10个证书能帮助突破行业限制,其中CDA数据分析师证书是跨领域通用的核心资质之一。金融行业必备证书证书名称适用岗位含金量备注CFA(特…...
GreaterWMS 开源库存管理系统深度解析:现代化仓储管理的架构与实践指南
GreaterWMS 开源库存管理系统深度解析:现代化仓储管理的架构与实践指南 【免费下载链接】GreaterWMS This Inventory management system is the currently Ford Asia Pacific after-sales logistics warehousing supply chain process . After I leave Ford , I sta…...
洞穴民宿的装修材料有哪些?
洞穴民宿的装修材料有哪些?在旅游市场不断发展的当下,洞穴民宿以其独特的风格和体验吸引着众多游客。那么,打造洞穴民宿需要用到哪些装修材料呢?天然石材天然石材是洞穴民宿装修的常用材料。如石灰岩、砂岩等,这些石材…...
银行报表填报避坑指南:G01-G04最新版本差异解析(2023更新)
银行报表填报避坑指南:G01-G04最新版本差异解析(2023更新) 银行报表填报工作向来是金融从业者的必修课,尤其是G01-G04系列报表作为监管报送的核心内容,其版本更新往往牵动着整个机构的神经。去年底至今,监管…...
使用C#代码在 Word 文档中插入数学公式
Word 文档中的数学公式是表达数学概念和关系的重要工具。无论您是在撰写学术论文、科学报告,还是其他涉及数学内容的文档,插入数学公式都可以大大提升您对复杂数学概念的表达能力,并增强文档的视觉效果与专业性。本文将介绍如何使用 Spire.Do…...
Swift高性能计算终极指南:Surge库快速入门教程
Swift高性能计算终极指南:Surge库快速入门教程 想要在Swift应用中实现高性能数学计算吗?Surge库是你的完美选择!Surge是一个基于Accelerate框架的Swift高性能计算库,专门为矩阵运算、数字信号处理和图像处理提供优化的数学函数。…...
Python使用SymSpell详解:打造极速拼写检查引擎
在自然语言处理(NLP)领域,拼写检查是提升文本质量的关键环节。传统方法如PyEnchant依赖语言规则库,而基于深度学习的模型(如BERT)虽精度高但计算成本高昂。本文将聚焦SymSpell——一个基于对称删除算法的Py…...
电子设计实战:如何用S8050三极管搭建深度饱和开关电路(附详细计算步骤)
电子设计实战:如何用S8050三极管搭建深度饱和开关电路(附详细计算步骤) 在硬件开发中,三极管开关电路是最基础却最容易被低估的设计之一。许多工程师虽然能快速搭建出功能电路,却常常忽略饱和区的精确控制——直到电路…...
