Skip to content

Commit 5f091e9

Browse files
committedNov 16, 2021
feat: update solutions to lc problem: No.2073
No.2073.Time Needed to Buy Tickets
1 parent c56bbf2 commit 5f091e9

File tree

6 files changed

+112
-95
lines changed

6 files changed

+112
-95
lines changed
 

‎solution/2000-2099/2073.Time Needed to Buy Tickets/README.md

+38-31
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
<pre><strong>输入:</strong>tickets = [2,3,2], k = 2
2222
<strong>输出:</strong>6
23-
<strong>解释:</strong>
23+
<strong>解释:</strong>
2424
- 第一轮,队伍中的每个人都买到一张票,队伍变为 [1, 2, 1] 。
2525
- 第二轮,队伍中的每个都又都买到一张票,队伍变为 [0, 1, 0] 。
2626
位置 2 的人成功买到 2 张票,用掉 3 + 3 = 6 秒。
@@ -52,6 +52,8 @@
5252

5353
<!-- 这里可写通用的实现逻辑 -->
5454

55+
第 k 个人买完之前,排在 k 后面的人最多能买 `tickets[k] - 1` 次,排在 k 前面的人最多能买 `tickets[k]`
56+
5557
<!-- tabs:start -->
5658

5759
### **Python3**
@@ -61,14 +63,13 @@
6163
```python
6264
class Solution:
6365
def timeRequiredToBuy(self, tickets: List[int], k: int) -> int:
64-
i = ans = 0
65-
while True:
66-
if i == k and tickets[i] == 1:
67-
return ans + 1
68-
if tickets[i] > 0:
69-
tickets[i] -= 1
70-
ans += 1
71-
i = (i + 1) % len(tickets)
66+
ans = 0
67+
for i, t in enumerate(tickets):
68+
if i <= k:
69+
ans += min(tickets[k], t)
70+
else:
71+
ans += min(tickets[k] - 1, t)
72+
return ans
7273
```
7374

7475
### **Java**
@@ -78,15 +79,15 @@ class Solution:
7879
```java
7980
class Solution {
8081
public int timeRequiredToBuy(int[] tickets, int k) {
81-
for (int i = 0, ans = 1;; i = (i + 1) % tickets.length) {
82-
if (i == k && tickets[i] == 1) {
83-
return ans;
84-
}
85-
if (tickets[i] > 0) {
86-
--tickets[i];
87-
++ans;
82+
int ans = 0;
83+
for (int i = 0; i < tickets.length; i++) {
84+
if (i <= k) {
85+
ans += Math.min(tickets[k], tickets[i]);
86+
} else {
87+
ans += Math.min(tickets[k] - 1, tickets[i]);
8888
}
8989
}
90+
return ans;
9091
}
9192
}
9293
```
@@ -125,15 +126,15 @@ function timeRequiredToBuy(tickets: number[], k: number): number {
125126
class Solution {
126127
public:
127128
int timeRequiredToBuy(vector<int>& tickets, int k) {
128-
for (int i = 0, ans = 1;; i = (i + 1) % tickets.size())
129-
{
130-
if (i == k && tickets[i] == 1) return ans;
131-
if (tickets[i] > 0)
132-
{
133-
--tickets[i];
134-
++ans;
129+
int ans = 0;
130+
for (int i = 0; i < tickets.size(); ++i) {
131+
if (i <= k) {
132+
ans += min(tickets[k], tickets[i]);
133+
} else {
134+
ans += min(tickets[k] - 1, tickets[i]);
135135
}
136136
}
137+
return ans;
137138
}
138139
};
139140
```
@@ -142,16 +143,22 @@ public:
142143
143144
```go
144145
func timeRequiredToBuy(tickets []int, k int) int {
145-
ans := 1
146-
for i := 0; ; i = (i + 1) % len(tickets) {
147-
if i == k && tickets[i] == 1 {
148-
return ans
149-
}
150-
if tickets[i] > 0 {
151-
tickets[i]--
152-
ans++
146+
ans := 0
147+
for i, t := range tickets {
148+
if i <= k {
149+
ans += min(tickets[k], t)
150+
} else {
151+
ans += min(tickets[k]-1, t)
153152
}
154153
}
154+
return ans
155+
}
156+
157+
func min(a, b int) int {
158+
if a < b {
159+
return a
160+
}
161+
return b
155162
}
156163
```
157164

‎solution/2000-2099/2073.Time Needed to Buy Tickets/README_EN.md

+36-31
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<pre>
1919
<strong>Input:</strong> tickets = [2,3,2], k = 2
2020
<strong>Output:</strong> 6
21-
<strong>Explanation:</strong>
21+
<strong>Explanation:</strong>
2222
- In the first pass, everyone in the line buys a ticket and the line becomes [1, 2, 1].
2323
- In the second pass, everyone in the line buys a ticket and the line becomes [0, 1, 0].
2424
The person at&nbsp;position 2 has successfully bought 2 tickets and it took 3 + 3 = 6 seconds.
@@ -54,30 +54,29 @@ The person at&nbsp;position 0 has successfully bought 5 tickets and it took 4 +
5454
```python
5555
class Solution:
5656
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
6564
```
6665

6766
### **Java**
6867

6968
```java
7069
class Solution {
7170
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]);
7977
}
8078
}
79+
return ans;
8180
}
8281
}
8382
```
@@ -116,15 +115,15 @@ function timeRequiredToBuy(tickets: number[], k: number): number {
116115
class Solution {
117116
public:
118117
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]);
126124
}
127125
}
126+
return ans;
128127
}
129128
};
130129
```
@@ -133,16 +132,22 @@ public:
133132
134133
```go
135134
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)
144141
}
145142
}
143+
return ans
144+
}
145+
146+
func min(a, b int) int {
147+
if a < b {
148+
return a
149+
}
150+
return b
146151
}
147152
```
148153

Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
class Solution {
22
public:
33
int timeRequiredToBuy(vector<int>& tickets, int k) {
4-
for (int i = 0, ans = 1;; i = (i + 1) % tickets.size())
5-
{
6-
if (i == k && tickets[i] == 1) return ans;
7-
if (tickets[i] > 0)
8-
{
9-
--tickets[i];
10-
++ans;
4+
int ans = 0;
5+
for (int i = 0; i < tickets.size(); ++i) {
6+
if (i <= k) {
7+
ans += min(tickets[k], tickets[i]);
8+
} else {
9+
ans += min(tickets[k] - 1, tickets[i]);
1110
}
1211
}
12+
return ans;
1313
}
14-
};
14+
};
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
func timeRequiredToBuy(tickets []int, k int) int {
2-
ans := 1
3-
for i := 0; ; i = (i + 1) % len(tickets) {
4-
if i == k && tickets[i] == 1 {
5-
return ans
6-
}
7-
if tickets[i] > 0 {
8-
tickets[i]--
9-
ans++
2+
ans := 0
3+
for i, t := range tickets {
4+
if i <= k {
5+
ans += min(tickets[k], t)
6+
} else {
7+
ans += min(tickets[k]-1, t)
108
}
119
}
12-
}
10+
return ans
11+
}
12+
13+
func min(a, b int) int {
14+
if a < b {
15+
return a
16+
}
17+
return b
18+
}
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
class Solution {
22
public int timeRequiredToBuy(int[] tickets, int k) {
3-
for (int i = 0, ans = 1;; i = (i + 1) % tickets.length) {
4-
if (i == k && tickets[i] == 1) {
5-
return ans;
6-
}
7-
if (tickets[i] > 0) {
8-
--tickets[i];
9-
++ans;
3+
int ans = 0;
4+
for (int i = 0; i < tickets.length; i++) {
5+
if (i <= k) {
6+
ans += Math.min(tickets[k], tickets[i]);
7+
} else {
8+
ans += Math.min(tickets[k] - 1, tickets[i]);
109
}
1110
}
11+
return ans;
1212
}
13-
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
class Solution:
22
def timeRequiredToBuy(self, tickets: List[int], k: int) -> int:
3-
i = ans = 0
4-
while True:
5-
if i == k and tickets[i] == 1:
6-
return ans + 1
7-
if tickets[i] > 0:
8-
tickets[i] -= 1
9-
ans += 1
10-
i = (i + 1) % len(tickets)
3+
ans = 0
4+
for i, t in enumerate(tickets):
5+
if i <= k:
6+
ans += min(tickets[k], t)
7+
else:
8+
ans += min(tickets[k] - 1, t)
9+
return ans

0 commit comments

Comments
 (0)
Please sign in to comment.