[Java·算法·简单] LeetCode121. 买股票的最佳时机 详细解读

简介: [Java·算法·简单] LeetCode121. 买股票的最佳时机 详细解读

题目

给定一个数组 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 <= 105

0 <= prices[i] <= 104

👉️ 力扣原文

class Solution {
    public int maxProfit(int[] prices) {
        int cost = Integer.MAX_VALUE; // 初始化购买价格为整数最大值,确保第一个价格肯定小于 cost
        int maxprofit = 0; // 初始化最大利润为0
        // 遍历股票价格数组
        for (int price : prices) {
            cost = Math.min(price, cost); // 更新购买价格为 price 和 cost 中的较小值,确保 cost 始终表示最低购买价格
            maxprofit = Math.max(maxprofit, price - cost); // 计算当前卖出价格与购买价格的差值,与当前的最大利润进行比较,取较大者
        }
        return maxprofit; // 返回最大利润
    }
}
  • cost 用于表示截至当前日期为止的最低购买价格。它被初始化为 Integer.MAX_VALUE(最大值),确保第一个股价一定小于 cost
  • maxprofit 用于表示截至当前日期为止的最大利润,初始化为0。
  • 循环遍历股票价格数组 prices 中的每个价格 price
  • 对于每个价格,使用 Math.min 函数将 cost 更新为当前价格 pricecost 中的较小值,以确保 cost 始终表示最低的购买价格。
  • 然后,使用 Math.max 函数将 maxprofit 更新为当前价格 price 减去 cost 后的值和 maxprofit 中的较大值,以确保 maxprofit 始终表示最大的利润。
  • 继续遍历数组中的下一个价格,重复上述步骤。
  • 最终,返回 maxprofit,其中包含了整个股票交易过程中的最大利润。

这个算法通过不断更新最低的购买价格和最大的利润来找到最佳的买入和卖出时机,具有高效性能,因为它只需要一次遍历数组,时间复杂度是O(n),其中 n 是股价数组的长度。

相关文章
|
2天前
|
算法 安全 Java
性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
【4月更文挑战第28天】性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
14 1
性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
|
8天前
|
设计模式 算法 Java
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
|
9天前
|
搜索推荐 算法 Java
Java实现的常用八种排序算法
提到数据结构与算法,无法避免的一点就包含排序,熟练的掌握各种排序算法则是一个程序员必备的素质之一,除此之外,排序算法也是当下各大技术公司比较喜欢问的技术点,所以,就这一点JavaBuild整理了常见的8种排序算法
6 0
|
13天前
|
机器学习/深度学习 数据采集 算法
使用 Java 实现机器学习算法
【4月更文挑战第19天】Java在数据驱动时代为机器学习提供支持,具备丰富的数学和数据结构库,适用于实现线性回归、决策树、SVM和随机森林等算法。实现时注意数据预处理、模型选择、评估指标和可视化。利用Java的库和编程能力可构建高效模型,但需按问题需求选择合适技术和优化方法。
|
13天前
|
算法
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
代码随想录算法训练营第六十天 | LeetCode 84. 柱状图中最大的矩形
18 3
|
13天前
|
算法
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
15 3
|
13天前
|
算法
代码随想录算法训练营第五十六天 | LeetCode 647. 回文子串、516. 最长回文子序列、动态规划总结
代码随想录算法训练营第五十六天 | LeetCode 647. 回文子串、516. 最长回文子序列、动态规划总结
32 1
|
13天前
|
算法
代码随想录算法训练营第五十五天 | LeetCode 583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结
代码随想录算法训练营第五十五天 | LeetCode 583. 两个字符串的删除操作、72. 编辑距离、编辑距离总结
23 1
|
11天前
|
机器学习/深度学习 人工智能 算法
基于DCT和扩频的音频水印嵌入提取算法matlab仿真
本文介绍了结合DCT和扩频技术的音频水印算法,用于在不降低音质的情况下嵌入版权信息。在matlab2022a中实现,算法利用DCT进行频域处理,通过扩频增强水印的隐蔽性和抗攻击性。核心程序展示了水印的嵌入与提取过程,包括DCT变换、水印扩频及反变换步骤。该方法有效且专业,未来研究将侧重于提高实用性和安全性。
|
1天前
|
算法 数据安全/隐私保护 计算机视觉
基于DCT变换的彩色图像双重水印嵌入和提取算法matlab仿真
**算法摘要:** - 图形展示:展示灰度与彩色图像水印应用,主辅水印嵌入。 - 软件环境:MATLAB 2022a。 - 算法原理:双重水印,转换至YCbCr/YIQ,仅影响亮度;图像分割为M×N块,DCT变换后嵌入水印。 - 流程概览:两步水印嵌入,每步对应不同图示表示。 - 核心代码未提供。