美文网首页
4、动态或贪心

4、动态或贪心

作者: 风无止境 | 来源:发表于2019-02-27 21:45 被阅读0次

    1、买卖股票的最佳时机—*

    根据股价手势数组,计算出最大收益,只能交易一次。如[7,1,5,3,6,4],第2天买入,第5天卖出,最大收益5

    var maxProfit = function (prices) {
        var arr = [];
        for (let i = 1; i < prices.length; i++) {
            arr.push(prices[i] - prices[i - 1]);
        }
        // 后一个更大,还是相加更大;把最大值放在数组中
        var max = arr[0];
        for (let i = 1; i < arr.length; i++) {
            arr[i] = Math.max(arr[i], arr[i] + arr[i - 1])
            max = Math.max(max, arr[i]);
        }
        return max > 0 ? max: 0;
    };
    
    let maxProfit = function(prices) { // 最大值减最小值
        let max = 0;
        let min = Number.MAX_VALUE;
        
        for (let i = 0; i < prices.length; i++) {
            if (prices[i] < min) {
                min = prices[i];    
            } else if (prices[i] - min > max) {
                max = prices[i] - min;    
            }
        }
        return max;
    };
    

    2、买卖股票的最佳时机—*

    根据股价手势数组,计算出最大收益,可以多次交易,但只能一支股票。如[7,1,5,3,6,4],第2天买入,第3天卖出,第4天买入,第5天卖出,最大收益7

    var maxProfit = function (prices) {
      let sum = 0;
      let min = Number.MAX_VALUE;
      let max = 0;
      for(let i = 0; i < prices.length; i++) {
        if (prices[i] < min) {
          min = prices[i];
        } else if (prices[i] - min > max) {
          max = prices[i] - min;    
        }
        if (prices[i] > prices[i + 1]) {
          sum += max;
          min = Number.MAX_VALUE;
          max = 0;
        }
      }
      return sum + max;
    };
    
    var maxProfit = function(prices) {
        var max=0;
        for(var i=1;i<prices.length;i++){
            var d=prices[i]-prices[i-1];
            if(d>0){
                max+=d
            }
        }
        return max;
    };
    

    4、最大子序列和—*

    给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

    var maxSubArray = function (nums) {
        let max = nums[0];
        for(let i = 1; i < nums.length; i++) {
            nums[i] = Math.max(nums[i-1] + nums[i], nums[i])
            if(nums[i] > max) max = nums[i];
        }
        return max;
    };
    
    var maxSubArray = function(nums) {
      const nLen = nums.length;
      let max = nums[0];
      let lastMax = 0;
    
      for (let i = 0; i < nLen; i++) {
        lastMax += nums[i];
        if (lastMax > max) {
          max = lastMax;
        }
        if (lastMax < 0) {
          lastMax = 0;
        }
      }
      return max;
    };
    

    相关文章

      网友评论

          本文标题:4、动态或贪心

          本文链接:https://www.haomeiwen.com/subject/dymquqtx.html