一、买卖股票最佳时机(一)
给定一个数组 prices
,它的第 i
个元素 prices[i]
表示一支给定股票第 i
天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0
。
public class Solution {
public int maxProfit(int prices[]) {
//最大的利润就是买股票日子之后的价格减去买股票当天的价格
int minPrice = Integer.MAX_VALUE;
int maxProfit = 0;
for (int i = 0; i < prices.length; i++) {
if (minPrice > prices[i]) { //最小的价格依次和数组里剩余价格进行比较
minPrice = prices[i]; //实时更新,每次总区最小价格
} else if (prices[i] - minPrice > maxProfit) {
//更新最大利润
maxProfit = prices[i] - minPrice;
}
}
return maxProfit;
}
public static void main(String[] args) {
StockProfitCalculator calculator = new StockProfitCalculator();
int[] prices = {7, 1, 5, 3, 6, 4};
System.out.println("Maximum Profit: " + calculator.maxProfit(prices)); // 输出 5
}
}
二、买卖股票最佳时机(二)
给你一个整数数组 prices
,其中 prices[i]
表示某支股票第 i
天的价格。
在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。
返回 你能获得的 最大 利润 。
class Solution {
public int maxProfit(int[] prices) {
//贪心算法,只需要把所有上升趋势和加起来即可。
int res = 0;
for (int i = 1; i < prices.length; i++) {
res += Math.max(0, prices[i] - prices[i - 1]);
}
return res;
}
public static void main(String[] args) {
StockProfitCalculator2 calculator = new StockProfitCalculator2();
int[] prices = {7, 1, 5, 3, 6, 4}; // 示例输入
System.out.println("Maximum Profit: " + calculator.maxProfit(prices)); // 输出 7
}
}