题目描述

假设你有一个数组,其中第 i 个元素是股票在第i 天的价格。
你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。

示例 1:

输入: [8,1,5,3,7,4]
    输出: 6
    解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 7)的时候卖出,最大利润 = 7-1 = 5 。

注意:利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。

示例 2:

   输入: [9,6,5,2,1]
    输出: 0
    解释: 在这种情况下, 没有交易完成, 所以最大利润为0

 

思路:从头遍历数组,找当前最小值,每当遇到更大数值,比较差值与原先最大获利,遇到更小值,就更换min。
分析:时间复杂度O(n),空间复杂度O(1)。运行效率很高

public class MaxProfit {
    public static void main(String[] args) {
        int[] nums = {2,7,4,8,1,3};
    }

    /**
     *
     * @param prices int整型一维数组
     * @return int整型
     */
    public int maxProfit (int[] prices) {
        if(null == prices || prices.length == 1){
            return 0;
        }

        int min = prices[0];
        int maxPrice = 0; // 最大利润
        for(int i=0; i<prices.length; i++){
            if(min < prices[i]){
                maxPrice = prices[i] - min > maxPrice ? prices[i] - min : maxPrice;
            }else{
                min = prices[i];
            }
        }

        return maxPrice;
    }
}