Skip to content

糖果盒问题

题目描述

给定一个栈,有 N 个元素,每个元素的值可以是 RedBlueYellow 中的一个。

要求使用栈数据结构,删除 Input 中的所有 Yellow 元素,并且其他元素的顺序保持不变。

输入输出示例

javascript
// 随机存放 3 种不同的元素
Input = ['Red', 'Blue', 'Blue', 'Red', 'Yellow', 'Blue', 'Yellow', 'Red'];
javascript
// 所有的 Yellow 元素被删除
Ouput = ['Red', 'Blue', 'Blue', 'Red', 'Blue', 'Red'];

解题思路

  1. 声明一个辅助栈
  2. 输入栈中的所有元素依次弹出,并且添加到辅助栈
  3. 辅助栈不为空时进行循环操作:依次弹出元素,如果元素不等于 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);
    }
  }
}