63-卖出股票的最佳时机
小于 1 分钟
假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?
双指针
股票一定是先买后卖的,使用两个指针,x指向买入,y指向卖出,确保x在y之前。
假如y对应的价格高于或者等于x的价格,那么可以算下差值,与max比较,保留最大值。
假如y对应的价格小于x的价格,那么可以移动x,找到一个较小值。
public int maxProfit(int[] prices) {
if (prices == null || prices.length == 0) {
return 0;
}
if (prices.length == 2) {
return prices[1] > prices[0] ? prices[1] - prices[0] : 0;
}
int x = 0,y = 1;
int max = 0;
while(y < prices.length){
if(prices[y] >= prices[x]){
int gap = prices[y] - prices[x];
max = Math.max(max, gap);
y++;
}else{
x++;
}
}
return max;
}