leetcode 121. Best Time to Buy and Sell Stock

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 (i.e., buy one and sell one share of the stock), design an algorithm to find the maximum profit.

Note that you cannot sell a stock before you buy one.

Example 1:

Input: [7,1,5,3,6,4]
Output: 5
Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 6-1 = 5.
             Not 7-1 = 6, as selling price needs to be larger than buying price.

Example 2:

Input: [7,6,4,3,1]
Output: 0
Explanation: In this case, no transaction is done, i.e. max profit = 0.

解法一:BF

先从左向右开始,找出股票下跌后刚开始上涨的那一个拐点。然后开始暴风,从该点开始逐个算出可能的收益值。

 

解法二:Kadane's Algorithm

class Solution {
    public int maxProfit(int[] prices) {
        int res = 0, max = 0;
        for(int i = 1; i < prices.length; i++) {
            //计算目前为止的最大收益 
            //(当收益小于0时,意味着找到了一个更低的最低点,因此归零,重新开始)
            max = Math.max(0, max += prices[i] - prices[i-1]);
            //记录从一开始到现在最大收益的最大值
            res = Math.max(res, max);
        }
        return res;
    }
}

 

posted @ 2019-02-09 19:53  JamieLiu  阅读(144)  评论(0编辑  收藏  举报