跳至主要內容

63-卖出股票的最佳时机

daipeng小于 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;
    }