面试题 03.01. 三合一
解题思路
1.最初并未理解stackNum的含义,仔细分析题意和提交一次之后,发现stackNum代表的是第几个栈的意思,题意中三个栈的描述,也就是说每次push,是往指定的栈push元素的意思,所以根据题意分析,
- 如何用一个数组实现三个栈的存储和读取,是本题要解决的问题*
2.根据题意分析,三个栈的大小是相同的,但是里面的元素个数可能不同,所以可以用一个new int[stackSize3]数组来存储三个栈的数据
3.存储时,需要按照一定规则来,将数组划分为三个区域,(0stackSize-1)(stackSize2stackSize-1)(2stackSize~3stackSize-1)
4.读取时,需要有三个指针,分别指向三个栈的当前位置,初始位置为(-1,stackSize-1,2*stackSize-1)
解题遇到的问题
题意理解
后续需要总结学习的知识点
##解法
class TripleInOne {
private int[] vendor = null;
private int[] currentIndex = null;
private int stackSize = 0;
public TripleInOne(int stackSize) {
this.stackSize = stackSize;
vendor = new int[stackSize * 3];
currentIndex = new int[]{-1, stackSize - 1, 2 * stackSize - 1};
}
public void push(int stackNum, int value) {
if (currentIndex[stackNum] >= (stackNum + 1) * stackSize - 1) {
return;
}
vendor[++currentIndex[stackNum]] = value;
}
public int pop(int stackNum) {
if (currentIndex[stackNum] < stackNum * stackSize) {
return -1;
}
return vendor[currentIndex[stackNum]--];
}
public int peek(int stackNum) {
if (currentIndex[stackNum] >= stackNum * stackSize) {
return vendor[currentIndex[stackNum]];
}
return -1;
}
public boolean isEmpty(int stackNum) {
return currentIndex[stackNum] < stackNum * stackSize ? true : false;
}
}
网友评论