// 购买通行证
function purchasePass(queue, position){
let time = 0;
function _purchasePass(queue, position){
queue[0] -= 1; //排在最前面的人购买一张票
time += 1; //消耗一小时
if(queue[0] === 0){ //判断此人是否完成自身购得票数的期望呢?
// 如果此人是亚力克斯,则游戏结束
if(position <= 0){
return time; //返回亚力克斯买完所需要的票,消耗的时间
}
// 此人不是亚力克斯
queue.splice(0, 1); //买完了自身所有的票数,离开买票队列
position-- //亚力克斯进一位
}else{
if(position !== 0){ //排在最前面的人是否是亚力克斯
position-- //别人买完票,重新排队,亚力克斯进一位
// 没有买完自身所有的票数,重新排队
const temp = queue.splice(0, 1);
queue.push(...temp);
}else{
// 没有买完自身所有的票数,重新排队
const temp = queue.splice(0, 1);
queue.push(...temp)
position = queue.length - 1 //更新亚力克斯在数组中的位置,亚力克斯买完票,重新排队
}
}
return _purchasePass(queue, position)
}
return _purchasePass(queue, position)
}
console.log(purchasePass([1, 2, 5], 1)) //4
console.log(purchasePass([3, 2, 1], 0)) //5