原题链接: leetcode.cn/problems/ti…
解题思路:
- 根据题意,只要
tickets[k] > 0
,就可以不断排队购票 - 因此不断循环,直到
tickets[k]
为0停止 - 每次循环都将
tickets
中的每个人购票次数减1,同时将购票时间加1 - 如果遇到
tickets[k]
为1
,则进行最后一次购票,并返回结果
/**
* @param {number[]} tickets
* @param {number} k
* @return {number}
*/
var timeRequiredToBuy = function(tickets, k) {
let result = 0 // 存储结果
// 不断循环直到tickets[k]为0,表示购买到所需数量的票
while (tickets[k]) {
// 每次循环tickets
for (let i = 0; i < tickets.length; i++) {
// 如果当前是第k个人,他只剩一次购票机会,购票之后就退出循环
if (i === k && tickets[k] === 1) {
// 购票时间加1
result++
// 购票数量减1
tickets[k]--
break
}
// 如果tickets[i]大于0,表示还可购票
if (tickets[i]) {
// 购票时间加1
result++
// 购票数量减1
tickets[i]--
}
}
}
return result
};