2073. 买票需要的时间
2024-09-29 09:35:25

Problem: 2073. 买票需要的时间

思路

先分两段来考虑:

  1. 刚开始第k个人及之前的人买票,需要k + 1的时间,并且这些人需要的票减一。
  2. 接下来每轮,前方的人若是需要买的票少于第二段开始k的票,则他们一定会买完自己的票;反之,则购买第二段开始k的票数的票。

复杂度

  • 时间复杂度: $O(n)$:一次遍历数组。
  • 空间复杂度: $O(n)$:若干变量。

Code

[]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

class Solution {
    public int timeRequiredToBuy(int[] tickets, int k) {
        int ret = k + 1;
        int n = tickets.length;
        tickets[k]--;
        for (int i = 0; i < n; i++) {
            if (i < k) {
                tickets[i]--;
            }
            if (tickets[i] > tickets[k]) {
                ret += tickets[k];
            } else {
                ret += tickets[i];
            }
        }
        return ret;
    }
}