chencl1986 / Blog

Welcome to lee's blog.
464 stars 85 forks source link

LeetCode题解:2073. 买票需要的时间,模拟,JavaScript,详细注释 #468

Open chencl1986 opened 3 months ago

chencl1986 commented 3 months ago

原题链接: https://leetcode.cn/problems/time-needed-to-buy-tickets/

解题思路:

  1. 根据题意,只要tickets[k] > 0,就可以不断排队购票
  2. 因此不断循环,直到tickets[k]为0停止
  3. 每次循环都将tickets中的每个人购票次数减1,同时将购票时间加1
  4. 如果遇到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
};