Best Time to Buy and Sell Stock II

来源:互联网 发布:网站特效源码 编辑:程序博客网 时间:2024/05/21 17:46

非常straightforward的方法,只要后项比前向大,就把差值加进maxP。但是逻辑上违背了题目要求的不能在同一天又买又卖,只是数值是对的。

 public int maxProfit(int[] prices) {        if(prices == null || prices.length == 0) return 0;        int i = 0;        int maxP = 0;        while(i < prices.length - 1) {            maxP = Math.max(prices[i+1] - prices[i] + maxP, maxP);            i++;        }        return maxP;    }

换一种逻辑上也正确的思路,找到递增的开始和递减的开始,prices[dec] - prices[inc] 就是买卖获利了,把所有这样的区间找出来相加就是max profit.

public static int maxProfit(int[] prices) {         if(prices == null || prices.length < 2)             return 0;         int i = 0;         int maxP = 0;         while(i < prices.length - 1){             int buy=0;             int sell=0;             while(i < prices.length-1 && prices[i+1] < prices[i]) i++;             buy = i;                         while(i < prices.length-1 && prices[i+1] >= prices[i]) i++;             sell = i;             maxP += prices[sell] - prices[buy];         }         return maxP;     }


0 0
原创粉丝点击