您的位置:首页 > 其它

Best Time to Buy and Sell Stock II

2015-02-01 04:47 134 查看
非常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;
    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: