121.买卖股票的最佳时机
给定一个数组 prices
,它的第 i
个元素 prices[i]
表示一支给定股票第 i
天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0
。
思路
题干摘要,某一天买入,未来的某一天卖出,获取的最大利润
解题方法
1、初始化最小值为数组第一个元素
2、与数组里的元素循环比小,如果有更小值则替换
3、计算差额利润,并和0比较,大于零则赋值
4、输出最大值
复杂度
时间复杂度:
时间复杂度 O(n)
空间复杂度:
空间复杂度 O(1)
答案
public int maxProfit(int[] prices) {
int maxProfit = 0;
int minPrice = prices[0];
for (int price : prices) {
minPrice = Math.min(minPrice, price);
int profit = price - minPrice;
maxProfit = Math.max(maxProfit, profit);
}
return maxProfit;
}
122.买卖股票的最佳时机 II
给你一个整数数组 prices
,其中 prices[i]
表示某支股票第 i
天的价格。
在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。
返回 你能获得的 最大 利润 。
思路
题干摘要,最多一只股票,同一天出售,最大利润
解题方法
1、增加限制条件,只能持有一只股票
2、做贪心处理,当满足条件时计算差额
3、累计差额数据
复杂度
时间复杂度:
时间复杂度 O(n)
空间复杂度:
空间复杂度 O(n)
答案
public int maxProfit(int[] prices) {
int profit = 0;
for (int i = 1; i < prices.length; i++) {
if (prices[i] > prices[i - 1]) {
profit += prices[i] - prices[i - 1];
}
}
return profit;
}