当前位置: 代码迷 >> 综合 >> Lintcode:150. 买卖股票的最佳时机 II
  详细解决方案

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

热度:48   发布时间:2023-12-25 20:05:14.0

描述

假设有一个数组,它的第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;}