问题描述:
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。
注意你不能在买入股票前卖出股票。
示例 1:
输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。
只有一笔交易,所以只需要知道买入之后的最高价格,用一个数组记录第i天后面的最高价即可。
class Solution {
public int maxProfit(int[] prices) {
int length = prices.length;
int tempMax = 0;
int max = 0;
int profit = 0;
int[] maxPrice = new int[length];
for(int i = length-1; i >= 0; i--){
if(prices[i] > tempMax)
tempMax = prices[i];
maxPrice[i] = tempMax;
}
for(int i = 0; i < length; i++){
profit = maxPrice[i] - prices[i];
if(profit > max)
max = profit;
}
return max;
}
}