Lintcode:150. 买卖股票的最佳时机 II

描述

假设有一个数组,它的第i个元素是一个给定的股票在第i天的价格。设计一个算法来找到最大的利润。你可以完成尽可能多的交易(多次买卖股票)。然而,你不能同时参与多个交易(你必须在再次购买前出售股票)。

个人思路:做法借鉴于买卖股票的最佳时机(含手续费),还是在讨论该分一次卖还是分两次卖的收益更高,其实如果maxP > price[i],即i及之前的最高价格如果高于目前的价格,那么就是值得卖的,并且不用担心如果后面出现更大的数再卖会收获更大的收益

  public int maxProfit(int[] prices) {
        // write your code here
        if(prices.length == 0)
            return 0;
        
        int minP = prices[0];
        int maxP = prices[0];
        int curP = 0;
        int profit = 0;
        for (int i = 0; i < prices.length; i++) {
            minP = Integer.min(minP, prices[i]);
            maxP = Integer.max(maxP, prices[i]);
            curP = Integer.max(curP, prices[i] - minP);

            if (maxP >= prices[i]){
                profit += curP;
                curP = 0;
                maxP = prices[i];
                minP = prices[i];
            }
        }

        return profit;
    }

dalao思路:(原来是允许当天买入当天卖出?)贪心策略:如果后一天的比前一天股票价格高,反正没有手续费,那就值得卖以获取目前最大的利润。

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

猜你喜欢

转载自blog.csdn.net/qq_38702697/article/details/82820282