由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 白板代码,支持O(1)时间GetMin的stack
相关主题
谈谈面试中化归的思想C语言高手帮我看看下面代码,哪里错了啊,谢了
Arista Networks面经2请问怎么用Class实现Stack
minstack不是吧?我的这么简单的leetcode code怎么也memory limit exceeded?对一些烂大街了的面试题, 要注意伪装
怎么结果就不对呢Leetcode Min Stack问题
一道刚面的算法题Bloomberg phone interview 面经
CareerCup questionGoogle, Facebook, Rocket Fuel面经及经验总结
Depth-First-Search给大家看几道C 小程序
问道C内存的题?一道小题
相关话题的讨论汇总
话题: stack话题: int话题: max话题: size话题: push
进入JobHunting版参与讨论
1 (共1页)
j**l
发帖数: 2911
1
写一个stack, Push, Pop和GetMin都是O(1)时间
如果在白板上写出如下的代码,能达到面试官的基本要求么?
#define MAX_STACK_SIZE 1000
class Stack
{
int Data[MAX_STACK_SIZE];
int Link[MAX_STACK_SIZE];
int top;
public:
Stack() { top = -1; }
void Push(int x);
int Pop();
int GetMin();
};
void Stack::Push(int x)
{
if ((top + 1) == MAX_STACK_SIZE)
{
printf("Push failed, the stack is full.\n");
return;
}
int min_link = 0;
if (top > -1)
{
min_link = Link[top];
if
y**i
发帖数: 1112
2
贴一个我的,正好前几天也写了一个:
template
class Stack
{
T* val;
T* min;
int max_size;
int top;
public:
class Underflow { };
class Overflow { };
Stack() : max_size(1000), top(0) { val = new int[max_size]; min = new
int[max_size]; }
Stack(int s) : max_size(s), top(0) { val = new int[max_size]; min = new
int[max_size]; }
~Stack() { delete[] val; delete[] min; }
void Push(T t);
T Pop();
T GetMin();
};
template void Stack::Push(T t)
{
if (top
T*****9
发帖数: 2484
3
这是传说中的C/C++么。。。

【在 j**l 的大作中提到】
: 写一个stack, Push, Pop和GetMin都是O(1)时间
: 如果在白板上写出如下的代码,能达到面试官的基本要求么?
: #define MAX_STACK_SIZE 1000
: class Stack
: {
: int Data[MAX_STACK_SIZE];
: int Link[MAX_STACK_SIZE];
: int top;
: public:
: Stack() { top = -1; }

j**l
发帖数: 2911
4
看去不错,不过你的top,实际上是指向栈顶元素的上一个位置吧,这种用法不太符合
一般人的习惯。
另外用模板比较好,但为了方便应该可以用int写,然后再和面试官说可以用模板来支
持各种类型吧?
用异常也比较好。
白板的空间有限,时间也有限,如果写得太全太细,肯定会遇到费马的难处:这里边缘
太小,写不下。
是不是可以像我贴的代码那样尽量简化问题写,比如用int代替模板,用printf代替异
常,然后再和面试官提到模板和异常的技术?

【在 y**i 的大作中提到】
: 贴一个我的,正好前几天也写了一个:
: template
: class Stack
: {
: T* val;
: T* min;
: int max_size;
: int top;
: public:
: class Underflow { };

j**l
发帖数: 2911
5
你的方法是直接保存min的值,而不是序号,虽然免去了间接访问,但是空间可能要多
用一些吧?比如T的类型是double, 则min数组用的类型也是double,如果用序号的话就
可以固定min数组的类型为int了

【在 y**i 的大作中提到】
: 贴一个我的,正好前几天也写了一个:
: template
: class Stack
: {
: T* val;
: T* min;
: int max_size;
: int top;
: public:
: class Underflow { };

j**l
发帖数: 2911
6
请教下,这种混合的写法是面试的大忌么?

【在 T*****9 的大作中提到】
: 这是传说中的C/C++么。。。
g**********1
发帖数: 1113
7
Do not use any magic number.

【在 y**i 的大作中提到】
: 贴一个我的,正好前几天也写了一个:
: template
: class Stack
: {
: T* val;
: T* min;
: int max_size;
: int top;
: public:
: class Underflow { };

r****o
发帖数: 1950
8
what is magic number? 常数么?
\\

【在 g**********1 的大作中提到】
: Do not use any magic number.
g**********1
发帖数: 1113
9
Do not use template. Many problems may happen.
T*****9
发帖数: 2484
10

1000这种最好用define

【在 r****o 的大作中提到】
: what is magic number? 常数么?
: \\

d****g
发帖数: 33
11
感觉用链表+异常处理可能会好一点。数组模式不具备扩展性。
如果恶心一点,直接用deque。当然这样子不能给面试人员深刻印象。
1 (共1页)
进入JobHunting版参与讨论
相关主题
一道小题一道刚面的算法题
关于判断stack grows up or down那道题CareerCup question
谁能写个trie的框架?Depth-First-Search
白板写bug free code真的那么重要么?问道C内存的题?
谈谈面试中化归的思想C语言高手帮我看看下面代码,哪里错了啊,谢了
Arista Networks面经2请问怎么用Class实现Stack
minstack不是吧?我的这么简单的leetcode code怎么也memory limit exceeded?对一些烂大街了的面试题, 要注意伪装
怎么结果就不对呢Leetcode Min Stack问题
相关话题的讨论汇总
话题: stack话题: int话题: max话题: size话题: push