买卖股票专题系列2---买卖股票的最佳时机2

题目:

  给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

题解:

  由于可以交易多次,那么只要今天的股票价格比昨天的高,那么就交易。不用考虑今天的价格比前天的价格高,因为最大利润是一个累加的过程,这是一个典型的贪心算法,当然买卖股票系列都可用动态规划解决,但动态规划的本质是暴力穷举,能用贪心就不用动态规划。下面直接上代码:

Java版本:

public int maxProfit(int[] prices) {

        if(prices == null || prices.length <=1) return 0;
        int max = 0;
        for(int i=1;i<prices.length;i++){
            //只要今天的价格比昨天的价格高,就交易
            if(prices[i] > prices[i-1]) max += prices[i] - prices[i-1];
        }
        return max;
    }
JS版本:
 
 var maxProfit = function(prices) {
    //假如今天的价格低,明天价格高,就今天买明天卖
    //假如后天的价格明天还高,不要担心,因为max= 明天 - 今天 + (后天 - 明天) = 后天 - 今天
    let max = 0;
    for(let i=1;i<prices.length;i++){
      if(prices[i] > prices[i-1]){
        max += prices[i] - prices[i-1];
      }
    }
    return max;
  };
原文地址:https://www.cnblogs.com/bobobjh/p/14414641.html