描述
假设有一个数组,它的第i个元素是一个给定的股票在第i天的价格。设计一个算法来找到最大的利润。你可以完成尽可能多的交易(多次买卖股票)。然而,你不能同时参与多个交易(你必须在再次购买前出售股票)。
个人思路:做法借鉴于买卖股票的最佳时机(含手续费),还是在讨论该分一次卖还是分两次卖的收益更高,其实如果maxP > price[i],即i及之前的最高价格如果高于目前的价格,那么就是值得卖的,并且不用担心如果后面出现更大的数再卖会收获更大的收益
public int maxProfit(int[] prices) {// write your code hereif(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;}