经典面试题 之击鼓传花
甲乙丙丁小明 玩击鼓传花的游戏 从甲开始传 设置循环嵌套 当内部循环结束时跳出循环并 将当前循环到的最后一个人从队中淘汰 也就是出队 。然后开始下一次内部for循环
为了形成一个圈 内部for循环每次将循环到的当前的人 出队并从队尾进队 这样形成一个圈
外层循环直到只剩最后一个人为止
class Queue {
#items = {} //一个对象
#count = 0
#lowCount = 0
dequeue() { //出队列
if(this.isEmpty()){
return undefined
}
let res = this.#items[this.#lowCount]
delete this.#items[this.#lowCount]
this.#lowCount++
return res
}
enqueue(data) { //进入队列
this.#items[this.#count] = data
this.#count++
}
front() { //返回对头
return this.#items[this.#lowCount]
}
isEmpty() {
return this.size() === 0
}
size() {
return this.#count-this.#lowCount
}
clear() {
this.#items = {}
this.#count = 0;
this.#lowCount = 0
}
toString() {
let str = ""
for(let i =this.#lowCount;i<this.#count;i++){
str += `${this.#items[i]} `
}
return str
}
}
function game(list,num){
let queue = new Queue()
for(let i=0;i<list.length;i++){
queue.enqueue(list[i])
}
while(queue.size()>1){
for(let i=0;i<num;i++){
queue.enqueue(queue.dequeue())
}//dequeue()拿到的是它的返回值 这里表示删完了还要追加到队尾
console.log(queue.dequeue(),"淘汰了")
}
return {
winner:queue.dequeue()
}
}
game(["甲","乙","丙","丁","小明"],7)
//循环七次这里