• 股票的最大利润


    此博客链接: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;
        }
    }

    结果

     

    出来混总是要还的
  • 相关阅读:
    几个.net开源项目(转)
    UILabel显示换行的方法
    使用TDBXReader或TDataSet回传数据,中文乱码问题解决办法
    NSDateFormatter setDateFormat 自定义日期时间格式
    iPhone开发之打包zip文件
    创建log文件的代码
    去除iphone图标的半弧高亮效果
    Ajax XMLHttpRequest对象open方法的参数 为什么要把时间戳追加到目标URL?
    时间校验
    WPF视频
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/14511914.html
Copyright © 2020-2023  润新知