自学内容网 自学内容网

leetcode hot100【 LeetCode 121.买卖股票的最佳时机】java实现

LeetCode 121.买卖股票的最佳时机

题目描述

给定一个数组 prices,其中 prices[i] 表示第 i 天的股票价格。你可以无限次地买卖股票,你想要最大化利润。请你找出最多能赚取的利润。

示例 1:

输入: prices = [7,1,5,3,6,4]
输出: 7
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 获得利润 4。
     随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 获得利润 3。

示例 2:

输入: prices = [1,2,3,4,5]
输出: 4
解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 5)的时候卖出, 获得利润 4。

示例 3:

输入: prices = [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易机会,所以最大利润为 0。

Java 实现代码

class Solution {
    public int maxProfit(int[] prices) {
        if (prices == null || prices.length == 0) {
            return 0;
        }

        int minPrice = Integer.MAX_VALUE;
        int maxProfit = 0;

        for (int price : prices) {
            // 更新最低买入价
            if (price < minPrice) {
                minPrice = price;
            } else {
                // 计算当前利润并更新最大利润
                maxProfit = Math.max(maxProfit, price - minPrice);
            }
        }

        return maxProfit;
    }
}

解题思路

我们需要找到一个最小买入价和它之后出现的最大卖出价,使得两者之间的差值(利润)最大。 可以通过一次遍历来实现,维护以下变量:

  • minPrice:记录当前的最低买入价。
  • maxProfit:记录当前的最大利润。 在遍历数组时,不断更新 minPricemaxProfit 即可

复杂度分析

  • 时间复杂度: 遍历一次 prices 数组,时间复杂度为 O(n),n 是数组的长度。

  • 空间复杂度: 只使用了常数空间来存储 minPricemaxProfit,因此空间复杂度为 O(1)


原文地址:https://blog.csdn.net/qq_14815605/article/details/143677326

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!