18
18
<pre >
19
19
<strong >Input:</strong > tickets = [2,3,2], k = 2
20
20
<strong >Output:</strong > 6
21
- <strong >Explanation:</strong >
21
+ <strong >Explanation:</strong >
22
22
- In the first pass, everyone in the line buys a ticket and the line becomes [1, 2, 1].
23
23
- In the second pass, everyone in the line buys a ticket and the line becomes [0, 1, 0].
24
24
The person at  ; position 2 has successfully bought 2 tickets and it took 3 + 3 = 6 seconds.
@@ -54,30 +54,29 @@ The person at position 0 has successfully bought 5 tickets and it took 4 +
54
54
``` python
55
55
class Solution :
56
56
def timeRequiredToBuy (self , tickets : List[int ], k : int ) -> int :
57
- i = ans = 0
58
- while True :
59
- if i == k and tickets[i] == 1 :
60
- return ans + 1
61
- if tickets[i] > 0 :
62
- tickets[i] -= 1
63
- ans += 1
64
- i = (i + 1 ) % len (tickets)
57
+ ans = 0
58
+ for i, t in enumerate (tickets):
59
+ if i <= k:
60
+ ans += min (tickets[k], t)
61
+ else :
62
+ ans += min (tickets[k] - 1 , t)
63
+ return ans
65
64
```
66
65
67
66
### ** Java**
68
67
69
68
``` java
70
69
class Solution {
71
70
public int timeRequiredToBuy (int [] tickets , int k ) {
72
- for (int i = 0 , ans = 1 ;; i = (i + 1 ) % tickets. length) {
73
- if (i == k && tickets[i] == 1 ) {
74
- return ans;
75
- }
76
- if (tickets[i] > 0 ) {
77
- -- tickets[i];
78
- ++ ans;
71
+ int ans = 0 ;
72
+ for (int i = 0 ; i < tickets. length; i++ ) {
73
+ if (i <= k) {
74
+ ans += Math . min(tickets[k], tickets[i]);
75
+ } else {
76
+ ans += Math . min(tickets[k] - 1 , tickets[i]);
79
77
}
80
78
}
79
+ return ans;
81
80
}
82
81
}
83
82
```
@@ -116,15 +115,15 @@ function timeRequiredToBuy(tickets: number[], k: number): number {
116
115
class Solution {
117
116
public:
118
117
int timeRequiredToBuy(vector<int >& tickets, int k) {
119
- for (int i = 0, ans = 1;; i = (i + 1) % tickets.size())
120
- {
121
- if (i == k && tickets[ i] == 1) return ans;
122
- if (tickets[ i] > 0)
123
- {
124
- --tickets[ i] ;
125
- ++ans;
118
+ int ans = 0;
119
+ for (int i = 0; i < tickets.size(); ++i) {
120
+ if (i <= k) {
121
+ ans += min(tickets[ k] , tickets[ i] );
122
+ } else {
123
+ ans += min(tickets[ k] - 1, tickets[ i] );
126
124
}
127
125
}
126
+ return ans;
128
127
}
129
128
};
130
129
```
@@ -133,16 +132,22 @@ public:
133
132
134
133
```go
135
134
func timeRequiredToBuy(tickets []int, k int) int {
136
- ans := 1
137
- for i := 0; ; i = (i + 1) % len(tickets) {
138
- if i == k && tickets[i] == 1 {
139
- return ans
140
- }
141
- if tickets[i] > 0 {
142
- tickets[i]--
143
- ans++
135
+ ans := 0
136
+ for i, t := range tickets {
137
+ if i <= k {
138
+ ans += min(tickets[k], t)
139
+ } else {
140
+ ans += min(tickets[k]-1, t)
144
141
}
145
142
}
143
+ return ans
144
+ }
145
+
146
+ func min(a, b int) int {
147
+ if a < b {
148
+ return a
149
+ }
150
+ return b
146
151
}
147
152
```
148
153
0 commit comments