[leet code] Best Time to Buy and Sell Stock

来源:互联网 发布:js obj 获取value 编辑:程序博客网 时间:2024/04/30 13:15

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.

==========

Analysis:

My original thought was to calculate all the possible transactions by using nested loop.  But got time limit excess error.

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

I knew it can be done in O(n), but I could not figure it out by myself, so I checked the solutions that were available in Internet.  To summarize, in this approach, only the current minimum buy price would be used to calculate the profit (my original approach was to calculate all the possible transactions).  

public class Solution {    public int maxProfit(int[] prices) {        if (prices.length == 0) return 0;                int max = 0;        int min = Integer.MAX_VALUE;                for(int i=0; i<prices.length; i++){            max = Math.max(max, prices[i]-min);            min = Math.min(min, prices[i]);        }                return max;    }}


0 0