zoukankan      html  css  js  c++  java
  • 买卖股票的最佳时机 [ leetcode ]

    原题地址:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/description/

    给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

    设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

    注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

    示例 1:

    输入: [7,1,5,3,6,4]
    输出: 7
    解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
         随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。

    示例 2:

    输入: [1,2,3,4,5]
    输出: 4
    解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
         注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。
         因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。

    示例 3:

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

    以上为原题内容


      本题非常简单,只需理解题目本质即可:

      只需明白一点就即可:赚钱就买入,赔钱就卖出

      来看例子: 

        [7,  1,  5,  3,  6,  4],我们来看每一天的利润
          -6, 4, -2, 3, -2
        如果每天都买入,那么第二天的盈利分别为 [-6, 4, -2, 3,-2]
        很简单,我只要在赔钱的那一天之前卖出,保证不赔钱,在赚钱的时间段内都持有股票就行。

     理解了题意,代码本身就非常简单了:

     1     public int maxProfit(int[] res) {
     2         int sum = 0, d = 0;
     3         for (int i = res.length - 1; i > 0; i--) {
     4             d = res[i] - res[i - 1];
     5             if (d > 0) {
     6                 sum += d;
     7             }
     8         }
     9         return sum;
    10     }

      

      循环遍历数组,后边的元素减去前一个元素,如果差值为正,代表当天盈利,将差值累加到sum中。最终返回sum即是最大利润。



        
  • 相关阅读:
    prometheus 文档
    go
    nginx
    python使用xlrd读取合并单元格
    python使用xlrd模块读取Excel
    创建Excel文件:ModuleNotFoundError: No module named 'openpyxl'
    openpyxl模块安装时报错: You are using pip version 19.2.3, however version 20.0.2 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command.
    Python定义字典函数报错TypeError: takes 0 positional arguments but 1 was given
    Mysql--information_scherma(虚拟库)
    day07--MySQL索引
  • 原文地址:https://www.cnblogs.com/zfLee/p/9355033.html
Copyright © 2011-2022 走看看