Algorithm/src/main/java/greedy/MaxProfit.java
2025-07-16 20:50:07 +08:00

44 lines
1.7 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package greedy;
/**
* 题目: 121. 买卖股票的最佳时机 (maxProfit)
* 描述:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
* 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
* 返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
* 示例 1
输入:[7,1,5,3,6,4]
输出5
解释:在第 2 天(股票价格 = 1的时候买入在第 5 天(股票价格 = 6的时候卖出最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
* 链接https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/
*/
//第一次做没想出来,每次都假设是今天卖出,然后求今天之前的历史最低点。
//二刷会做
public class MaxProfit {
public int maxProfit2(int[] prices) {
int maxprofit=0;
int minprice=prices[0];
for (int i = 1; i < prices.length; i++) {
if(prices[i]>minprice)maxprofit=Math.max(maxprofit,prices[i]-minprice);
else minprice=prices[i];
}
return maxprofit;
}
public int maxProfit(int prices[]) {
int minprice = Integer.MAX_VALUE;
int maxprofit = 0;
for (int price : prices) {
if (price < minprice) {
minprice = price;
} else if (price - minprice > maxprofit) { //else if 是因为今日如果买进今日卖出收益为0
maxprofit = price - minprice;
}
}
return maxprofit;
}
}