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
:记录当前的最大利润。 在遍历数组时,不断更新minPrice
和maxProfit
即可
复杂度分析
时间复杂度: 遍历一次
prices
数组,时间复杂度为O(n)
,n
是数组的长度。空间复杂度: 只使用了常数空间来存储
minPrice
和maxProfit
,因此空间复杂度为O(1)
。
原文地址:https://blog.csdn.net/qq_14815605/article/details/143677326
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!