关于序列的面试题3------------股票问题
2013-05-21 22:03
225 查看
BAT大神hulu面试中,三面的第二道题就是股票问题,而恰巧室友在amazon面试中也遇到了这个问题。、
问题:一个人知道未来n天的每天股票的价格,请你给出一个算法,使得这个人从哪天买入,哪天卖出能获得最大的收益。
问题实际上就是求一个数组后面元素减前面元素的最大值
O(n2)的方法就不说了。BAT大神回答的方法,复杂度是O(nlgn), 面试官说答案就是O(nlgn), 但是我室友告诉我的方法复杂度是O(n),前面一部分保存最小值都是一样的,但是后面没必要非要找到最大值:
代码如下:
个人觉得我O(n)应该是最优的时间复杂度
问题:一个人知道未来n天的每天股票的价格,请你给出一个算法,使得这个人从哪天买入,哪天卖出能获得最大的收益。
问题实际上就是求一个数组后面元素减前面元素的最大值
O(n2)的方法就不说了。BAT大神回答的方法,复杂度是O(nlgn), 面试官说答案就是O(nlgn), 但是我室友告诉我的方法复杂度是O(n),前面一部分保存最小值都是一样的,但是后面没必要非要找到最大值:
代码如下:
#include <stdio.h> #include <stdlib.h> int findMaxDiff(int a[], int len) { int i = 0; int minLeft = a[0]; int max = a[1] - a[0]; for(int i = 2; i < len; i++) { if(a[i - 1] < minLeft) { minLeft = a[i-1]; } if(a[i] - minLeft > max) { max = a[i] - minLeft; } } return max; } int main() { int a[7] = {4, 4, 2, 14, 1, 2, 15}; printf("%d\n", findMaxDiff(a, 7)); return 0; }
个人觉得我O(n)应该是最优的时间复杂度
相关文章推荐
- 关于微软面试题:"四人过桥"问题的思考——“n人过桥”问题的演进(Java实现)
- 对一道面试题的总结与扩展思考(关于一笔画问题的数学分析)
- 一个关于数组存储特定序列问题的思考
- C++ 关于最大连续子序列(和最大)问题
- 一道面试题:关于fork的问题
- 对一道面试题的总结与扩展思考(关于一笔画问题的数学分析)
- java面试题inti=2;i+=i-=i*i的值以及关于i++;++i;i=i+1;i+=1 的效率问题
- 股票买进卖出问题—百度实习招聘面试题
- 关于最大连续子序列问题的解法
- 关于微软面试题:"四人过桥"问题的思考——“n人过桥”问题的演进(Java实现)
- 对一道面试题的总结与扩展思考(关于一笔画问题的数学分析)(转载)
- 关于最大子序列和问题以及相关衍生问题的分析
- java面试题中常见的关于String类问题总结
- 关于《Proofs from THE BOOK》chapter22 单调序列问题
- 关于oracle11g数据库不能创建序列的报错问题----实现表id自增问题
- 面试题:(2)关于fork的问题
- 关于C++随机数生成中种子值设置的一点总结,解决随机数序列重复问题
- R 时间序列 股票画图问题
- 今天做到一道面试题:Android开发关于ANR问题
- 【剑指offer】4.3举例让抽象问题具体化——面试题22:栈的压入、弹出序列