由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - implement 3 stack in an array
相关主题
问个经典面试题select2perform上面C++测试挺头疼的
LeetCode Jump Game [Runtime Error]c++ new的一个问题
问leetcode上surrounded regions,新的test case出runtime error请教一个java Synchronized Blocks和Lock的问题
linkedin今天的电面题请问怎么用Class实现Stack
function pointer 是compile time还是run time得到地址的?用C设计Stack的interface,要求支持各种数据类型。
请问strcpy()和memcpy()的写法问题java: use vector to shuffle a deck of Card 问题
一个c++题(exception handling)有人有Cracking the Coding Interview 150题, 5th Edition?
帮忙看看我写的atoi有没有bug, 谢谢问个google面试题
相关话题的讨论汇总
话题: capacity0话题: head1话题: head0话题: arr
进入JobHunting版参与讨论
1 (共1页)
c****n
发帖数: 7
1
这个是career up 4th 上的一道题,我怎么觉得它上面的solution有问题?
哪个大侠给贴个正确的解?
s*********s
发帖数: 318
2
I think this link gives correct solution:
http://stackoverflow.com/questions/4770627/how-to-implement-3-s
b******7
发帖数: 92
3
注意左移右移就行了
第一个栈[0...capacity0 - 1)
第二、三个栈[capacity0,...,N)分别一个从头开始++,一个从尾开始--
当第一个栈满而第二、三个栈不满时,做右移操作
反过来,但第二、三个栈满,而第一个栈伟满时,做左移操作
template
class TripleStack{
public:
TripleStack()
{
head0 = 0;
head1 = capacity0 = N/3;
head2 = N-1;
}
void push0(const T & e)
{
if(!isSubStackFull(0))
arr[head0++] = e;
else if(!isSubStackFull(1))
{
shiftRight();
arr[head0++] = e;
}
else
throw runtime_error("stack overflow");
}
void push1(const T & e)
{
if(!isSubStackFull(1))
{
arr[head1++] = e;
}
else if(!isSubStackFull(0))
{
shiftLeft();
arr[head1++] = e;
}
else
throw runtime_error("stack overflow");
}
void push2(const T & e)
{
if(!isSubStackFull(2))
{
arr[head2--] = e;
}
else if(!isSubStackFull(0))
{
shiftLeft();
arr[head2--] = e;
}
else
throw runtime_error("stack overflow");
}
void pop0()
{
if(head0 == 0)
throw runtime_error("stack0 empty");
head0--;
}
void pop1()
{
if(head1 == capacity0)
throw runtime_error("stack1 empty");
head1--;
}
void pop2()
{
if(head2 == N-1)
throw runtime_error("stack2 empty");
head2++;
}
...
private:
void shiftLeft()
{
assert(!isSubStackFull(0));
//[capacity0,head1)--->[capacity0-1,head1-1)
for(int i = capacity0; i < head1; i++)
arr[i-1] = arr[i];
capacity0--;
head1--;
}
void shiftRight()
{
assert(!isSubStackFull(1));
//[capacity0,head1) --->[capacity0+1,head1+1)
for(int i = head1-1; i >= capacity0; i--)
arr[i+1] = arr[i];
capacity0++;
head1++;
}
bool isSubStackFull(int i) const//i = 0,1,2
{
assert(i>=0 && i<=2);
if(i==0)
return head0 == capacity0;
else
return head1 > head2;
}
private:
T arr[N];
int head0;//[0,head0)
int head1;//[capacity0,head1)
int head2;//(head2,N)
int capacity0;
};
1 (共1页)
进入JobHunting版参与讨论
相关主题
问个google面试题function pointer 是compile time还是run time得到地址的?
Ask a google interview question请问strcpy()和memcpy()的写法问题
Graph DFS Iterative一个c++题(exception handling)
recursive中该用reference 还是普通变量传递?帮忙看看我写的atoi有没有bug, 谢谢
问个经典面试题select2perform上面C++测试挺头疼的
LeetCode Jump Game [Runtime Error]c++ new的一个问题
问leetcode上surrounded regions,新的test case出runtime error请教一个java Synchronized Blocks和Lock的问题
linkedin今天的电面题请问怎么用Class实现Stack
相关话题的讨论汇总
话题: capacity0话题: head1话题: head0话题: arr