122. Best Time to Buy and Sell Stock II

一、题目

  1、审题

  2、分析

    给出一个股票的每日价格的数组,可以多次交易,求最大利润是多大。

 

 二、解答

  1、思路: 

    方法一、

      求最大利润,从后往前看,若以现在的价格卖出,前一天的价格买入的话,即可完成这次交易,并获得利润。最终统计所有的利润即可。

    public int maxProfit11(int[] prices) {
        int total = 0;
        for (int i = 1; i < prices.length; i++) {
            if(prices[i] > prices[i-1])
                total += prices[i] - prices[i-1]; 
        }
        return total;
    }

 

    方法二、

      ①、先查找从当前位置开始的最小值 min,直到后一个数比 min 大则,记录此最小数 min。

      ②、从 min 后查从当前开始的最大数 max,直到碰到比前一个数小的,则记录此最大值 max。

      ③、max - min 即为一次获利交易,继续向后查找。

  public int maxProfit(int[] prices) {
        int profit = 0, i = 0;
        int len = prices.length;
        while(i < len) {
            while(i < len -1 && prices[i + 1] <= prices[i])
                i++;
            int min = prices[i++];
            while(i < len -1 && prices[i + 1] >= prices[i])
                i++;
            
            profit += i < len ? prices[i++] - min : 0;
        }
        return profit;
    }

 

posted @ 2018-10-07 11:33  skillking2  阅读(110)  评论(0编辑  收藏  举报