# 练习

# 击鼓传花游戏

孩子们围成一个圆圈,把花尽快地传递给旁边的人。某一时刻传花停止,这个时候花在谁手里,谁就退出圆圈、结束游戏。重复这个过程,直到只剩一个孩子(胜者)。

function hotPotato(elementsList, num) {
    const queue = new Queue();
    const elimitatedList = [];
    for (let i = 0; i < elementsList.length; i++) {
        queue.enqueue(elementsList[i])
    }
    while (queue.size() > 1) {
        for (let i = 0; i < num; i++) {
            queue.enqueue(queue.dequeue())
        }
        elimitatedList.push(queue.dequeue())
    }
    return {
        eliminated: elimitatedList,
        winner: queue.dequeue()
    }
}

const names = ['John', 'Jack', 'Camila', 'Ingrid', 'Carl'];

const result = hotPotato(names, 7);

result.eliminated.forEach(name => {
    console.log(`${name}在击鼓传花游戏中被淘汰。`);
});
console.log(`胜利者: ${result.winner}`);

# 回文检察

回文是正反都能读通的单词、词组、数或一系列字符的序列,例如 madam或 racecar。

function palindromeChecker(num) {
    if (num < 0 || num > 2 ** 31 - 1) {
        return false
    }
    if (num < 10) {
        return true
    }
    const dequeue = new Deque()
    for (let i = 0; i < String(num).length; i++) {
        dequeue.addBack(String(num)[i])
    }

    let isEqual = true
    let firstChar, lastChar;

    while (dequeue.size() > 1 && isEqual) {
        firstChar = dequeue.removeFront()
        lastChar = dequeue.removeBack()
        if (firstChar !== lastChar) {
            return false
        }
    }
    return isEqual
}

console.log(palindromeChecker(11011));

# 题目推荐

  • 155 最小栈
  • 150 逆波兰表达式求值
  • 94 二叉树的中序遍历
  • 133 克隆图
  • 200 岛屿数量
  • 84 柱状图中最大的矩形
  • 232 用栈实现队列
  • 542 01 矩阵
更新时间: 12/20/2020, 4:29:51 PM