leetcode - 2073. Time Needed to Buy Tickets

Description

There are n people in a line queuing to buy tickets, where the 0th person is at the front of the line and the (n - 1)th person is at the back of the line.

You are given a 0-indexed integer array tickets of length n where the number of tickets that the ith person would like to buy is tickets[i].

Each person takes exactly 1 second to buy a ticket. A person can only buy 1 ticket at a time and has to go back to the end of the line (which happens instantaneously) in order to buy more tickets. If a person does not have any tickets left to buy, the person will leave the line.

Return the time taken for the person at position k (0-indexed) to finish buying tickets.

Example 1:

Input: tickets = [2,3,2], k = 2
Output: 6
Explanation: 
- In the first pass, everyone in the line buys a ticket and the line becomes [1, 2, 1].
- In the second pass, everyone in the line buys a ticket and the line becomes [0, 1, 0].
The person at position 2 has successfully bought 2 tickets and it took 3 + 3 = 6 seconds.

Example 2:

Input: tickets = [5,1,1,1], k = 0
Output: 8
Explanation:
- In the first pass, everyone in the line buys a ticket and the line becomes [4, 0, 0, 0].
- In the next 4 passes, only the person in position 0 is buying tickets.
The person at position 0 has successfully bought 5 tickets and it took 4 + 1 + 1 + 1 + 1 = 8 seconds.

Constraints:

n == tickets.length
1 <= n <= 100
1 <= tickets[i] <= 100
0 <= k < n

Solution

Brute Force

Just simulation.

Time complexity: o ( s u m ( A ) ) o(sum(A)) o(sum(A))
Space complexity: o ( n ) o(n) o(n)

Math

All numbers before k appear min(A[i], A[k]) times, and all numbers after k appear min(A[i], A[k] - 1) times.

Time complexity: o ( n ) o(n) o(n)
Space complexity: o ( 1 ) o(1) o(1)

Code

Brute Force

class Solution:
    def timeRequiredToBuy(self, tickets: List[int], k: int) -> int:
        tickets = [(item, index) for index, item in enumerate(tickets)]
        res = 0
        while tickets:
            new_tickets = []
            for item in tickets:
                res += 1
                if item[0] - 1 > 0:
                    new_tickets.append((item[0] - 1, item[1]))
                else:
                    if item[1] == k:
                        return res
            tickets = new_tickets
            if len(tickets) == 1:
                res += tickets[0][0]
                return res

Math

class Solution:
    def timeRequiredToBuy(self, tickets: List[int], k: int) -> int:
        res = 0
        for i in range(len(tickets)):
            if i <= k:
                res += min(tickets[i], tickets[k])
            else:
                res += min(tickets[i], tickets[k] - 1)
        return res

相关推荐

  1. leetcode 207.课程表

    2024-04-10 17:40:01       8 阅读
  2. leetcode - 2073. Time Needed to Buy Tickets

    2024-04-10 17:40:01       13 阅读
  3. leetcode课程表-207-拓扑排序

    2024-04-10 17:40:01       29 阅读
  4. LeetCode 每日一题 2023/12/4-2023/12/10

    2024-04-10 17:40:01       35 阅读
  5. LeetCode 每日一题 2023/12/11-2023/12/17

    2024-04-10 17:40:01       42 阅读
  6. LeetCode 每日一题 2023/12/18-2023/12/24

    2024-04-10 17:40:01       33 阅读
  7. LeetCode --- 2073. Time Needed to Buy Tickets 解题报告

    2024-04-10 17:40:01       7 阅读
  8. LeetCode203. 移除链表元素

    2024-04-10 17:40:01       32 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-10 17:40:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-10 17:40:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-10 17:40:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-10 17:40:01       18 阅读

热门阅读

  1. react ant design 通过函数弹出 modal窗口

    2024-04-10 17:40:01       10 阅读
  2. webRtc生产环境实用方法

    2024-04-10 17:40:01       12 阅读
  3. Linux下的文件权限

    2024-04-10 17:40:01       10 阅读
  4. Fiddler的安装和使用

    2024-04-10 17:40:01       12 阅读
  5. 【C++】深入理解C++命名空间

    2024-04-10 17:40:01       13 阅读
  6. 【iOS ARKit】App 中嵌入 AR Quick Look

    2024-04-10 17:40:01       14 阅读
  7. Python map遍历

    2024-04-10 17:40:01       15 阅读
  8. BERT入门:理解自然语言处理中的基本概念

    2024-04-10 17:40:01       13 阅读
  9. About MATLAB

    2024-04-10 17:40:01       14 阅读
  10. 【鸿蒙NEXT】设置全屏

    2024-04-10 17:40:01       37 阅读
  11. Vue中实现【组件局部刷新】及【页面刷新】

    2024-04-10 17:40:01       15 阅读
  12. Linux中redis测试环境搭建3主3从

    2024-04-10 17:40:01       13 阅读