Leetcode NO.121 Best Time To Buy And Sell Stock 买卖股票时间

【C++】每日一题 121 买卖股票的最佳时机 该算法的核心思想是维护两个变量:当前最小价格(minPrice)和当前最大利润(maxProfit)。在遍历数组时,更新最小价格和计算当前价格与最小价格的差值,得到当前最大利润。最终返回最大利润即可。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。遍历数组一次,时间复杂度为 O(n),其中 n 为数组的长度。仅使用了常量级别的额外空间,空间复杂度为 O(1)。 阅读详情

1.问题描述

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

2.测试用例

示例 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。

3.提示

  • 1 <= prices.length <= 105
  • 0 <= prices[i] <= 104

4.代码

1.暴力
code
public int maxProfitWithForce(int[] prices) {
    int maxProfit = 0;

    for (int i = 1; i < prices.length - 1; i++) {
        for (int j = i; j < prices.length; j++) {
            maxProfit = Math.max(prices[j] - prices[i], maxProfit);
        }
    }
    return maxProfit;
}
复杂度
* 时间复杂度 O(n^2)
* 空闲复杂度 O(1)
2.动态规划
code
public int maxProfitWithDp(int[] prices) {
    int maxProfit = 0;
    int minNum = Integer.MAX_VALUE;

    for (int i = 0; i < prices.length; i++) {
        minNum = Math.min(minNum, prices[i]);
        maxProfit = Math.max(maxProfit, prices[i] - minNum);
    }
    return maxProfit;
}
复杂度
* 时间复杂度 O(n)
* 空间复杂度 O(1)
【LeetCode题目详解】第八章 贪心算法 part02 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II (day32补) 股票问题其实是一个系列的,属于动态规划的范畴,因为目前在讲解贪心系列,所以股票问题会在之后的动态规划系列中详细讲解。可以看出有时候,贪心往往比动态规划更巧妙,更好用,所以别小看了贪心算法。本题中理解利润拆分是关键点!不要整块的去看,而是把整体利润拆为每天的利润。一旦想到这里了,很自然就会想到贪心了,即:只收集每天的正利润,最后稳稳的就是最大利润了。这道题目关键点在于:不用拘泥于每次究竟跳几步,而是看覆盖范围,覆盖范围内一定是可以跳过来的,不用管是怎么跳的。大家可以看出思路想出来了,代码还是非常简单的。 阅读详情

相关推荐

【经典算法】LeetCode 121. 买卖股票的最佳时机(Java/C/Python3实现含注释说明,Easy)

对比项一次遍历(贪心算法)动态规划解题思路每次选择当前状态下的最优解,不考虑未来的变化构建状态转移方程,逐步求解,保存中间结果适用场景局部最优选择能直接导致全局最优,如连续上涨的市场涉及多次买入卖出、考虑冷冻期、手续费等复杂情况空间复杂度O(1),较低,只需保存当前状态信息O(n),较高,需保存多个状态的最优解时间复杂度O(n), 较低,通常一次遍历即可O(n),较高,需遍历所有可能状态全局最优性保证不一定能保证全局最优解可以得到全局最优解灵活性较低,适用于简单直接的交易策略。

2401_84427485的博客 1881

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

tomjobs的博客 1764

激光甲烷传感器DIY指南:从DFB激光器选型到Herriott池光路搭建

本文详细介绍了如何DIY激光甲烷传感器,从DFB激光器选型到Herriott池光路搭建的全过程。通过TDLAS技术实现ppm级甲烷检测,适用于家用燃气泄漏监测和农业沼气监测等场景。文章包含核心器件选型、光路搭建技巧、信号调理方案及系统集成优化,为创客提供实用指南。

f9g0h的博客 595

LeetCode:121.买卖股票的最佳时机——动态规划

121. 买卖股票的最佳时机(1、2)——动态规划、贪心策略 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择**某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票**。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。 🍎道阻且长,行则将至。🍓!!!

Super algorithm 的博客,技术爱好者。 3266

从Stereo-seq原始数据到Seurat对象:华大空间转录组分析流程实战解析

本文详细解析了从Stereo-seq原始数据到Seurat对象的完整分析流程,重点解决华大空间转录组数据处理中的三大痛点:bin_size参数设置、批量处理内存管理及格式转换信息丢失。通过Python的stereopy库和R的SeuratDisk包,实现.gem到.h5ad再到.h5seurat的高效转换,为研究者提供了一套可复用的空间转录组分析解决方案。

weixin_30315723的博客 217

语言 拉丁超立方抽样_医学统计与R语言:间断时间序列分析(Interrupted time series regression)...

微信公众号:医学统计与R语言如果你觉得对你有帮助,欢迎转发Interrupted time series (ITS) analysis is a valuable study design for evaluating the effectiveness of population-level health interventions that have been implemented...

weixin_29300805的博客 3706

LeetCode 121. Best Time to Buy and Sell Stock 题解

本题是贪心算法的经典应用,也是股票系列问题的入门题目。贪心:维护最低价格,计算最大利润动态规划:状态定义为持有/不持有股票空间优化:只需要维护两个状态通过本题可以深入理解贪心算法和动态规划在股票问题中的应用。

cannonjinx的博客 4040

深入解析ACS SPiiPlus运动控制器的托管API架构与实战应用

本文深入解析了ACS SPiiPlus运动控制器的托管API架构,详细介绍了其核心模块、设计哲学与实战应用。通过C#/.NET封装的托管接口,开发者能够高效实现多轴协同运动控制、EtherCAT总线集成以及事件驱动的异步编程,显著提升高精度工业自动化设备的开发效率与系统稳定性。

jwt8token的博客 861

leetcode best-time-to-buy-and-sell-stock(Java)

leetcode题目 best-time-to-buy-and-sell-stock – newcoder 30 买卖股票的最佳时机 – leetcode 121 题目描述 * Say you have an array for which the i th element * is the price of a given stock on day i. * * If you were...

聚沙成塔 484

二、ROS2完成Docker容器和宿主机通信,使用ros2 topic list看到,但是无法echo

如果容器和主机权限不一致,则会导致无法通信(我的代码中,docker容器是root,宿主机是普通用户),虽然可以查询到相关话题,但是订阅后没有消息输出。比如,docker容器创建了一个共享内存,其所有者为docker容器用户root,当宿主机去访问的时候,由于用户不同,没有权限访问,也就无法进行信息传递。该方法只是临时修改共享内存的权限,每次运行完,需要重新运行上述命令,才可以进行通信。在运行的过程中,ROS2使用了共享内存机制,会共享内存。运行之后,宿主机和容器可能用户名不同,这是因为。

qq_43280851的博客 1265

CPU 访问外设的两种核心机制:MMIO(Memory-Mapped I/O) 和 DMA(Direct Memory Access)

BAR和DMA是计算机系统中两种关键的数据传输机制:BAR(基址寄存器)用于CPU与设备间的控制通信,映射设备寄存器便于配置操作;而DMA(直接内存访问)允许设备直接读写系统内存,无需CPU参与大量数据传输。典型场景如NVMe SSD读取数据时,CPU通过BAR下发指令,设备通过DMA高效传输数据到主机内存,最后中断通知CPU。虽然BAR能映射大内存空间,但仍无法替代DMA的高效数据传输功能,两者各司其职——BAR负责控制,DMA专注数据传输,共同实现高性能的硬件交互。

MHD0815的博客 237

【leetcode】40-best-time-to-buy-and-sell-stock 力扣 121. 买卖股票的最佳时机

解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。核心的一点:最大的利润,卖出之前则必须是买入的最小值、卖出的最大值。b1 买入时,我们初始化为 -prices[0];输入:prices = [7,6,4,3,1]输入:[7,1,5,3,6,4]

917

【视频监控国标GB/T28181】无人机的视频图传技术

然而,随着无人机市场的不断发展和无人机视频图传技术的迅速进步,一些厂家正积极探索更多的传输方式。如今,一些大疆无人机已经具备了4G辅助图传功能,这意味着它们需要在无人机上安装相应的SIM卡,并在有移动互联网信号的情况下,通过互联网进行视频图传。这种技术的应用,不仅提高了无人机的操作灵活性,也使得无人机在各个领域的应用更加广泛。在使用时,用户需时刻注意无人机的飞行距离。在无人机图传系统中,OFDM技术的运用更是如虎添翼,显著增强了视频传输的品质与稳定性,尤其在错综复杂的电磁环境中,更能凸显其不可替代的优势。

开源物联网项目商业化作者 5662

Leetcode Best Time to Buy and Sell Stock python 问题解析

Leetcode 121题 Best Time to Buy and Sell Stock Say you have an array for which the ith element is the price of a given stock on day i. If you were only permitted to complete at most one transaction (i....

润泽的博客 286

杰理AC695N系列芯片 LED7数码管使用教程

杰理AC695N数码管使用摘要 本教程介绍了杰理AC695N芯片驱动LED7数码管的实现方法: 硬件配置:支持7/12/13脚三种数码管类型,详细说明了7脚数码管的标准段码定义和GPIO接线方式。 软件设置: 通过修改配置文件启用LED7功能 配置GPIO引脚映射(PORTC/PORTA组) 选择与硬件匹配的真值表 层次架构:包含硬件层、驱动层、UI层和应用层的完整设计,支持数字、字符和图标显示功能。 实现要点包括正确配置引脚类型、选择真值表,并通过UI风格设置为LED7模式。

qq_42014563的博客 1346

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

leetcode 121. Best Time to Buy and Sell Stock 买卖股票的最佳时机 动态规划

leetcode 121. Best Time to Buy and Sell Stock 买卖股票的最佳时机 动态规划 leetcode 2020年3月 每日一题打卡 题目: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。 示例 1: 输入: [7,1,...

weixin_43973433的博客 158

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

闯关leetcode——121. Best Time to Buy and Sell Stock

实际我们在考虑这个问题时,需要抓住一个点:起始位置(目前的最小值)后如果小于该值的值,则它和后面出现的最大值的差就是最大差;如果出现了比它小的值,就要拿这个小的值向后去尝试。以此类推,可以得出最大的差值。这样它的复杂度就是O(n)。一种直观的思路就是找到一个值后,去寻找它后面最大的值,然后将差保存起来。不停迭代这个过程,得到最大的差值。但是这个思路是O(n。这题就是要找到在一个区间中,计算一个值与后面最大值的差,然后找到最大的差。

方亮的专栏 1351

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

42-best-time-to-buy-and-sell-stock-iii 力扣 123. 买卖股票的最佳时机 III

随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天 (股票价格 = 4)的时候卖出,这笔交易所能获得利润 = 4-1 = 3。解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4。解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3。你最多可以完成 两笔 交易。输入:prices = [3,3,5,0,0,3,1,4]

1063

【Leetcode】121. 最佳买卖股票的时间 I(Best Time to Buy and Sell Stock)

Leetcode - 121 Best Time to Buy and Sell Stock (Easy) 题目描述:最多交易一次。 解法一:DP public int maxProfit(int[] prices) { if(prices == null || prices.length == 0) return 0; int[][] mp = new int[prices.le...

厉兵秣码 175

【LeetCode】 Best Time to Buy and Sell Stock I II III IV 解题报告

Best Time to Buy and Sell Stock I题意:用一个数组表示股票每天的价格,数组的第i个数表示股票在第i天的价格。 如果只允许进行一次交易,也就是说只允许买一支股票并卖掉,求最大的收益。分析:动态规划法。从前向后遍历数组,记录当前出现过的最低价格,作为买入价格,并计算以当天价格出售的收益,作为可能的最大收益,整个遍历过程中,出现过的最大收益就是所求。**代码:**O(n)时

跳出温水的青蛙 2万+

LeetCode 股票买卖系列 best time to buy and sell stock

LeetCode 股票买卖系列 best time to buy and sell stock

andyL_05的博客 540

LeetCode Array 121 122 Best Time to Buy and Sell Stock I II

Array 121. Best Time to Buy and Sell Stock Say you have an array for which the ith element is the price of a given stock on day i. If you were only permitted to complete at most one transaction (i.e.,...

Yi Jiao's Blog 159

Leetcode 188 Best Time to Buy and Sell Stock IV 至多k次买卖股票最大收益

假设你有一个数组,里面记录的是每一天的股票的价格。设计一个算法来计算最大收益。你至多可以完成k次交易。你不能同时进行多次交易(即,在你买入股票之前必须卖掉手里的股票)。

(ง •̀_•́)ง 2024

leetcode 121. Best Time to Buy and Sell Stock

leetcode-121 Best Time to Buy and Sell Stock (Easy) Say you have an array for which the ith element is the price of a given stock on day i. If you were only permitted to complete at most one transacti...

Night_Thief的博客 166

LeetCode算法题之121. Best Time to Buy and Sell Stock(easy)【Python3动态规划题解】

题目描述: Say you have an array for which the ith element is the price of a given stock on day i. If you were only permitted to complete at most one transaction (i.e., buy one and sell one share of the st...

DaMoWangZQ的博客 445
上一篇: Knapsack Problem 0-1 背包问题
下一篇: Leetcode NO.70 Climbing Stairs 爬楼梯
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值