關於序列的面試題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)應該是最優的時間復雜度

     


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com