最佳買賣股票的時間

原題

  Say you have an array for which the ith element is the price of a given stock on day i.
  If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit.算法

題目大意

  給一個數組prices[],prices[i]表明股票在第i天的售價,求出只作一次交易(一次買入和賣出)能獲得的最大收益。數組

解題思路

  只須要找出最大的差值便可,即 max(prices[j] – prices[i]) ,i < j。一次遍歷便可,在遍歷的時間用遍歷low記錄 prices[o….i] 中的最小值,就是當前爲止的最低售價,時間複雜度爲 O(n)。spa

代碼實現

算法實現類.net

public class Solution {

    public int maxProfit(int[] prices) {

        if (prices == null || prices.length < 1) {
            return 0;
        }

        int min = prices[0];
        int profit = 0;

        // 第i天的價格能夠看做是買入價也能夠看做是賣出價
        for (int i = 1; i < prices.length; i++) {
            // 找到更低的買入價
            if (min > prices[i]) {
                // 更新買入價
                min = prices[i];
            } 
            // 當天的價格不低於買入價
            else {
                // 若是當天買出的價格比以前賣出的價格高
                if (profit < prices[i] - min) {
                    // 更新賣出價
                    profit = prices[i] - min;
                } 
            }
        }

        return profit;
    }
}
相關文章
相關標籤/搜索