面试题63:股票的最大利润

题目

假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?
例如:一只股票在某些时间节点的价格为{9,11,8,5,7,12,16,14}。如果我们能在价格为5的时候买入并在价格为16时卖出,则能收获最大的利润11

解题思路

  1. 若把股票的买入价和卖出价组成一个数对,那么利润就是这个数对的差值。因此,最大利润就是数组中所有数对的最大差值
  2. 定义函数diff(i)为当卖出价为数组中第i个数字时可能获得的最大利润。
    3)若买入价越低获得的利润越大,也就是说若在扫描到数组中的第i个数字时,只要能记住之前的i-1个数字中的最小值,那就能算出当前价位卖出时可能得到的最大利润。

代码

  1. 可以充分利用求最大值的公式
max = a>b ? a:b;

这样我们的代码会更加简洁

min = min > a[i] ? min:a[i];
max = a[i]-min > max ?a[i]-min : min;
class Solution{
  public:
    int maxDiff(int *a,int length)
    {
        if(length < 2)
        {
            return 0;
        }
        int min = a[0];
        int max = 0;
        for(int i = 1;ia[i])
            {
                min = a[i];
            }
            
            if(max < (a[i]-min))
            {
                max = a[i]-min;
            }
            //max = a[i]-min > max ?a[i]-min : min;
        }
        return max;
    }
};

完整代码见Github

你可能感兴趣的:(面试题63:股票的最大利润)