今天早上去大众点评面试,面试官问了一个关于算法的题目,当时脑袋短路,没有回答出来,在地铁上想了想,现在把答案发出来。
题目大意是这样的:实现一个先进后出的队列,要求能返回最大值,不能用循环。
public class MyStack { Stack<int[]> _Stack = new Stack<int[]>(); int _max = 0; public int Max { get { int[] array = _Stack.Peek(); return array[1]; } } public void Push(int a) { if (a > _max) { _max = a; } int[] array = new int[] { a, _max }; _Stack.Push(array); } public int Pop() { int[] array = _Stack.Pop(); _max = array[1]; return array[0]; } }
补充一下,上面没有做任何线程安全方面的控制,只是列出了思路。
还有另外一个算法的题目,大意是关于提款的,要求一次性能提出来,面试官举了一个例子:要取出27元,有10块、2块和一块面额,那么就需要取2个十块,2个两块和3个一块,又说到我们不知道面额,只知道颜色什么的,我没有听懂面试官的意思,所以就直接说不会了。
面试官的人不错,面试过程比较的轻松,不过,我最后挂了。呵呵。