zoukankan      html  css  js  c++  java
  • 关于序列的面试题3股票问题

      BAT大神hulu面试中,三面的第二道题就是股票问题,而恰巧室友在amazon面试中也遇到了这个问题。、

      问题:一个人知道未来n天的每天股票的价格,请你给出一个算法,使得这个人从哪天买入,哪天卖出能获得最大的收益。

      问题实际上就是求一个数组后面元素减前面元素的最大值

      O(n2)的方法就不说了。BAT大神回答的方法,复杂度是O(nlgn), 面试官说答案就是O(nlgn), 但是我室友告诉我的方法复杂度是O(n),前面一部分保存最小值都是一样的,但是后面没必要非要找到最大值:

    代码如下:

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 int findMaxDiff(int a[], int len)
     5 {
     6     int i = 0;
     7     int minLeft = a[0];
     8     int max = a[1] - a[0];
     9     for(int i = 2; i < len; i++)
    10     {
    11         if(a[i - 1] < minLeft)
    12         {
    13             minLeft  = a[i-1];
    14         }
    15         if(a[i] - minLeft  > max)
    16         {
    17             max = a[i] - minLeft;
    18         }
    19     }
    20     return max;
    21 }  
    22 int main()
    23 {
    24     int a[7] = {4, 4, 2, 14, 1, 2, 15};
    25     printf("%d\n", findMaxDiff(a, 7));
    26     
    27     return 0;
    28 }

    个人觉得我O(n)应该是最优的时间复杂度

         

  • 相关阅读:
    Linux 添加Nginx 到 service 启动
    PHP编译安装时常见错误解决办法,php编译常见错误
    7 适配器模式
    6 单例模式及其多线程问题
    5 简单工厂、工厂、抽象工厂
    4 装饰者模式
    3 观察者模式
    2 策略模式
    1 UML基础
    代码操作Word时,目录自动更新的两种方法
  • 原文地址:https://www.cnblogs.com/iamccme/p/3091706.html
Copyright © 2011-2022 走看看