股票的最大利润

此博客链接:https://www.cnblogs.com/ping2yingshi/p/14511914.html

股票的最大利润

题目链接:https://leetcode-cn.com/problems/gu-piao-de-zui-da-li-run-lcof/

题目

假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?

示例 1:

输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。
示例 2:

输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。

题解

错误思路1

先遍历数组找数组中的最小值,然后找最小值后面的最大值,求最大值和最小值的差值。

代码

class Solution {
    public int maxProfit(int[] prices) {
        int len=prices.length;
        if(len==0)
        {
            return  0;
        }
        int min=prices[0];
       
        int minindex=0;
        int maxindex=0;
        for(int i=1;i<len;i++)
        {
                if(min>prices[i])
                {
                  min=prices[i];
                  minindex++;
                }
        }
        if(minindex==len-1)
        {
            return 0;
        }
        int max=prices[minindex];
        for(int i=minindex;i<len;i++){
              if(max<prices[i])
               {
                  max=prices[i];
               }
        }


        return max-min;
    }
}

思路2

使用滑动窗口,找滑动窗口内差值最大的值,差值中需要后面的数比前面的数大。可是我不知道滑动窗口大小定义多少。

官方题解

方法1

说明

差值,利用双重循环,找出差值最大的数。

代码

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

结果

方法2

说明

先找出当前中包含的最小值,然后判断当前值减去最小值的差值是否是整个数组中最大的,返回最大差值。

代码

class Solution {
    public int maxProfit(int[] prices) {
      int len=prices.length;
      if(len==0)
      return 0;
      int min=prices[0];
      int max=0;
      for(int i=0;i<len;i++)
      {
          if(min>prices[i])
          {
              min=prices[i];
          }
          if(prices[i]-min>max)
              {
                  max=prices[i]-min;
              }
          
      }
      return max;
    }
}

结果

 

出来混总是要还的
原文地址:https://www.cnblogs.com/ping2yingshi/p/14511914.html