今天早上去大众点评面试,面试官问了一个关于算法的题目,当时脑袋短路,没有回答出来,在地铁上想了想,现在把答案发出来。
题目大意是这样的:实现一个先进后出的队列,要求能返回最大值,不能用循环。
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个一块,又说到我们不知道面额,只知道颜色什么的,我没有听懂面试官的意思,所以就直接说不会了。
面试官的人不错,面试过程比较的轻松,不过,我最后挂了。呵呵。