码迷,mamicode.com
首页 > 其他好文 > 详细

122. Best Time to Buy and Sell Stock II

时间:2018-10-07 12:14:37      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:for   []   方法   查找   max   span   and   class   最大值   

一、题目

  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;
    }

 

122. Best Time to Buy and Sell Stock II

标签:for   []   方法   查找   max   span   and   class   最大值   

原文地址:https://www.cnblogs.com/skillking/p/9749684.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!