# 练习
# 击鼓传花游戏
孩子们围成一个圆圈,把花尽快地传递给旁边的人。某一时刻传花停止,这个时候花在谁手里,谁就退出圆圈、结束游戏。重复这个过程,直到只剩一个孩子(胜者)。
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 矩阵