图解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^)/ ~ 「干货分享,每天更新」

相关文章
|
18天前
|
算法
《LeetCode》—— 买卖股票的最佳时机
《LeetCode》—— 买卖股票的最佳时机
|
18天前
|
算法 索引
leetcode代码记录(买卖股票的最佳时机
leetcode代码记录(买卖股票的最佳时机
15 1
|
5天前
|
存储
【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点
【LeetCode】剑指 Offer 54. 二叉搜索树的第k大节点
14 1
|
11天前
|
算法
力扣123. 买卖股票的最佳时机 III(状态dp)
力扣123. 买卖股票的最佳时机 III(状态dp)
|
18天前
|
算法
leetcode代码记录(买卖股票的最佳时机 IV
leetcode代码记录(买卖股票的最佳时机 IV
19 2
|
18天前
|
算法
leetcode代码记录(买卖股票的最佳时机 III
leetcode代码记录(买卖股票的最佳时机 III
19 5
|
18天前
leetcode代码记录(买卖股票的最佳时机 II
leetcode代码记录(买卖股票的最佳时机 II
12 1
|
18天前
|
算法 DataX
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
|
18天前
|
算法 定位技术
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
19 0
|
18天前
|
算法
【力扣】121. 买卖股票的最佳时机、122.买卖股票的最佳时机Ⅱ
【力扣】121. 买卖股票的最佳时机、122.买卖股票的最佳时机Ⅱ