图解LeetCode——剑指 Offer 63. 股票的最大利润

简介: 图解LeetCode——剑指 Offer 63. 股票的最大利润

一、题目

假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?

二、示例

2.1> 示例 1:

【输入】 [7,1,5,3,6,4]

【输出】 5

【解释】 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。

2.2> 示例 2:

【输入】 [7,6,4,3,1]

【输出】 0

【解释】 在这种情况下, 没有交易完成, 所以最大利润为 0。

限制:

  • 0 <= 数组长度 <= 10^5

三、解题思路

  • 根据题目描述,只买卖一次股票,那么可以获得最大利润时多少?既然要获得最大的利润,那么一定是在某个有效的时间区间内购买的股票价格最低,而卖出的股票价格最高。
  • 通过方法入参的数组prices中,是按照时间先后顺序进行排序,那么其中的一个约束点就是时间了,即:最低点的股票购买时间点一定要在卖出的股票最高点之前,这样才算是一个有效的时间区间。那么,当我们遍历数组prices的时候,只要找到了一个价格低点min时,它后面所有的股票价格时间都是晚于它的,那么就可以通过计算每个价格与价格低点的差值,然后将利润最大的暂时保存在result变量中。
  • 那么当我们发现出现了更低价格的时候,min的值将被更新,然后再继续向后遍历对比利润值。直到数组prices数组中所有的元素都被遍历一遍之后,result变量的值,就是只买卖一次股票,可以获得的最大利润。

四、代码实现

classSolution {
publicintmaxProfit(int[] prices) {
if (prices.length==0) return0;
intmax=0, min=prices[0];
for (inti=1; i<prices.length; i++) {
min=Math.min(min, prices[i]);
max=Math.max(max, prices[i] -min);
        }
returnmax;
    }
}


今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

相关文章
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
55 6
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 26. 树的子结构
这篇文章提供了解决LeetCode上"剑指Offer 26. 树的子结构"问题的Python代码实现和解析,判断一棵树B是否是另一棵树A的子结构。
48 4
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 04. 二维数组中的查找
剑指Offer题目 "二维数组中的查找" 的Python解决方案,包括非递归迭代、递归以及使用内置函数的二分查找方法,以判断一个有序的二维数组中是否含有给定整数。
34 1
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 03. 数组中重复的数字
解决剑指Offer题目 "数组中重复的数字" 的Python实现方法,通过使用字典来记录数组中每个数字的出现次数,快速找出重复的数字。
37 1
|
3月前
|
iOS开发 MacOS
【Mac系统】解决Vscode中LeetCode插件不能刷剑指offer题库
文章讨论了解决Mac系统中Vscode里LeetCode插件无法刷剑指Offer题库的问题,并提供了一些相关的使用技巧和资源链接。
227 1
|
3月前
|
算法 Python
【Leetcode刷题Python】309. 最佳买卖股票时机含冷冻期
解决LeetCode上309题“最佳买卖股票时机含冷冻期”的Python代码示例,利用动态规划方法计算在含有冷冻期约束下的最大利润。
41 1
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 30. 包含min函数的栈
本文提供了实现一个包含min函数的栈的Python代码,确保min、push和pop操作的时间复杂度为O(1)。
27 4
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
52 5
|
3月前
|
算法 Python
【Leetcode刷题Python】剑指 Offer 33. 二叉搜索树的后序遍历序列
本文提供了一种Python算法,用以判断给定整数数组是否为某二叉搜索树的后序遍历结果,通过识别根节点并递归验证左右子树的值是否满足二叉搜索树的性质。
22 3
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - II. 从上到下打印二叉树 II
本文提供了一种Python实现方法,用于层次遍历二叉树并按层打印结果,每层节点按从左到右的顺序排列,每层打印到一行。
37 3