题目描述
类似题目:122. 买卖股票的最佳时机 II
题目分析
- 根据题意,我们需要找出给定数组中两个数字之间的最大差值(即最大利润)
- 并且第二个数字(卖出价格)必须大于第一个数字(买入价格)。
解法分析
- 双重遍历:找到每个点和后面的点的差值,取最大
- 动态规划:前
i
天的最大收益 = max{前i-1
天的最大收益,第i
天的价格-
前i-1
天中的最小价格}
代码
class Solution {
public int maxProfit(int[] prices) {
// 最小入手价格,初始为最大值
int minPrice = Integer.MAX_VALUE;
// 最大收益,初始收益为0,要么就不买,买了就不亏
int maxProfit = 0;
for(int i = 0;i<prices.length;i++){
// 如果当前值比最小值还要小,就在这天买入
// 否则就计算当前收益,取最大值
if(prices[i] < minPrice){
minPrice = prices[i];
} else if(prices[i]-minPrice > maxProfit){
maxProfit = prices[i]-minPrice;
}
}
return maxProfit;
}
}