Appearance
糖果盒问题
题目描述
给定一个栈,有 N 个元素,每个元素的值可以是 Red
、Blue
、Yellow
中的一个。
要求使用栈数据结构,删除 Input
中的所有 Yellow
元素,并且其他元素的顺序保持不变。
输入输出示例
javascript
// 随机存放 3 种不同的元素
Input = ['Red', 'Blue', 'Blue', 'Red', 'Yellow', 'Blue', 'Yellow', 'Red'];
javascript
// 所有的 Yellow 元素被删除
Ouput = ['Red', 'Blue', 'Blue', 'Red', 'Blue', 'Red'];
解题思路
- 声明一个辅助栈
- 将输入栈中的所有元素依次弹出,并且添加到辅助栈中
- 当辅助栈不为空时进行循环操作:依次弹出元素,如果元素不等于
Yellow
,则添加到输入栈中
Code
javascript
const YELLOW = 'yellow';
const RED = 'red';
const BLUE = 'blue';
// 输入栈
const candyBox = [YELLOW, RED, YELLOW, BLUE, RED, BLUE, YELLOW, RED];
function removeYellow(candyBox) {
// 辅助栈
const stack = [];
while (candyBox.length > 0) {
// 依次弹出并且添加到辅助栈中去
stack.push(candyBox.pop());
}
while (stack.length > 0) {
// 依次弹出栈,如果不等于目标元素 Yellow,则添加到输入栈中
const candy = stack.pop();
if (candy !== YELLOW) {
candyBox.push(candy);
}
}
}