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

【思路】

我么知道,如果要获得利润,售出的价格必须要高出买入的价格,而且出售的日期要大于买入的日期。因此我们在最低时候买入,在最高的时候卖出。从第一天开始,吧第一天的价格设置为当前最低价格,如果后一天的价格高于最低价,我们就记录此时的价格差,如果此时的利润大于之前的最高利润则把它设置为当前最大利润,然后下标向后移动。如果有一天的价格低于当前最低价格,我们就把当前价格设置为最低价格,然后继续上述过程,直到遍历到数组末尾。这个过程其实是把数组分为一段一段,每一段的开始都是这一段范围的内的最低值。举个例子:[2,24,4,1,3,7]红色的一段中2是最小值,24是最大值。绿色的一段中1是最小值,7是最大值。

代码如下:

 1 public class Solution {
 2     public int maxProfit(int[] prices) {
 3         int min = 0;
 4         int mp = 0;
 5 
 6         for (int i = 1; i < prices.length; i++) {
 7             if (prices[min] > prices[i]) min = i;
 8             else mp = Math.max(mp, prices[i] - prices[min]);
 9         }
10 
11         return mp;
12     }
13 }

 

posted @ 2016-05-21 10:03  Black_Knight  阅读(183)  评论(0编辑  收藏  举报