题目描述
三合一。描述如何只用一个数组来实现三个栈。
我的解题
二维数组模拟,其中每一列代表一个栈,每列的第一行代表该栈里目前数据量
class TripleInOne {
public:
TripleInOne(int stackSize) {
size = stackSize;
TripleStack.resize(stackSize+1);
for (int k = 0; k < stackSize+1; ++k){
TripleStack[k].resize(3);
TripleStack[k][0]=0;
TripleStack[k][1]=0;
TripleStack[k][2]=0;
}
}
void push(int stackNum, int value) {
int nums = TripleStack[0][stackNum];
if(nums>=size) return;
TripleStack[0][stackNum]++;
TripleStack[nums+1][stackNum] = value;
}
int pop(int stackNum) {
int nums = TripleStack[0][stackNum];
if(nums==0) return -1;
int value = TripleStack[nums][stackNum];
TripleStack[nums][stackNum]=0;
TripleStack[0][stackNum]--;
return value;
}
int peek(int stackNum) {
int nums = TripleStack[0][stackNum];
if(nums==0) return -1;
int value = TripleStack[nums][stackNum];
return value;
}
bool isEmpty(int stackNum) {
if( TripleStack[0][stackNum]==0) return true;
return false;
}
private:
vector<vector<int>>TripleStack;
int size;
};
/**
* Your TripleInOne object will be instantiated and called as such:
* TripleInOne* obj = new TripleInOne(stackSize);
* obj->push(stackNum,value);
* int param_2 = obj->pop(stackNum);
* int param_3 = obj->peek(stackNum);
* bool param_4 = obj->isEmpty(stackNum);
*/
执行用时 :92 ms, 在所有 C++ 提交中击败了53.06%的用户
内存消耗 :35.6 MB, 在所有 C++ 提交中击败了100.00%的用户