zoukankan      html  css  js  c++  java
  • 剑指Offer63.股票最大利润

    原题链接

    思路:本题有点贪心算法的感觉,由题意可以确定的是卖一定在买之后,也就是说我们只需要任选一天作为中介,在它当天或它之前买入,在它当天或它之后卖出,这就是题意了。那如何下手呢,要求的是最大利润,计算公式就是卖价减去买价,也就是说卖价越高越好,买价越低越好,但是我们不知道以哪一天做为那个中介,因此我们可以对于每一天,计算在这一天及之前买入股票的最低价,并计算在这天及之后卖出的最高价,然后将卖价与买价相减,就既可以保证卖在买之后,还能保证求出最优解。

    参考代码如下

     1 public static int min(int a, int b) {
     2         return a < b ? a : b;
     3     }
     4 
     5     public static int max(int a, int b) {
     6         return a > b ? a : b;
     7     }
     8 
     9     public int maxProfit(int[] prices) {
    10         int len = prices.length;
    11         int[] left = new int[len];
    12         int[] right = new int[len];
    13         if(len > 0) {
    14             left[0] = prices[0];
    15             right[len - 1] = prices[len - 1];
    16         }
    17         for(int i = 1; i < len; i ++) {
    18             left[i] = min(left[i - 1], prices[i]);
    19             right[len - 1 - i] = max(right[len - i], prices[len - 1 - i]);
    20         }
    21         int ans = 0;
    22         for(int i = 0; i < len; i ++) {
    23             ans = max(ans, right[i] - left[i]);
    24         }
    25         return ans;
    26     }
    View Code
  • 相关阅读:
    LeetCode90.子集 ||
    Ubuntu下的Matlab安装
    FAQ
    青石板
    交叉熵损失函数
    tf常用函数
    激活函数
    SGD和GD的区别
    卷积神经网络
    Ubuntu安装Matlab2016b
  • 原文地址:https://www.cnblogs.com/bianjunting/p/14272304.html
Copyright © 2011-2022 走看看