1. 程式人生 > >28、買股票的最佳時間

28、買股票的最佳時間

給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。

如果你最多隻允許完成一筆交易(即買入和賣出一支股票),設計一個演算法來計算你所能獲取的最大利潤。

注意你不能在買入股票前賣出股票。
首先想到的是兩層迴圈,但是很明顯不是最優的解,因此考慮比較好的演算法

class Solution {
    public int maxProfit(int[] prices) {
        int max = 0;
        for(int i = 0; i < prices.length-1; i++){
        	for (int j = i+1; j < prices.length; j++) {
				if(prices[j]- prices[i] > max){
					max = prices[j]- prices[i];
				}
			}
        }
        return max;
    }
}

排名較高的程式碼,也比較好懂,比上面的程式碼複雜度低很多啊

class Solution {
    public int maxProfit(int[] prices) {
         if(prices==null||prices.length==0){
            return 0;
        }
        
         int min = prices[0];
        int result = 0;
        
       for(int i=0;i<prices.length;i++) {
           if(prices[i] < min ){
             min =prices[i];
           }else if(prices[i] - min > result){
             result = prices[i] - min ;
           }
      }
        return result;
    }
  }