Invalid Transactions LeetCode solution in Python

1
class Transaction:
2
def __init__(self, name, time, amount, city):
3
self.name = name
4
self.time = int(time)
5
self.amount = int(amount)
6
self.city = city
7

8

9
from collections import defaultdict
10

11

12
class Solution:
13
def invalidTransactions(self, transactions):
14
transactions = [
15
Transaction(*transaction.split(",")) for transaction in transactions
16
]
17
transactions.sort(key=lambda t: t.time) # O(nlogn) time
18

19
trans_indexes = defaultdict(list)
20
for i, t in enumerate(transactions): # O(n) time
21
trans_indexes[t.name].append(i)
22

23
res = []
24
for name, indexes in trans_indexes.items(): # O(n) time
25
left = right = 0
26
for i, t_index in enumerate(indexes):
27
t = transactions[t_index]
28
if t.amount > 1000:
29
res.append("{},{},{},{}".format(t.name, t.time, t.amount, t.city))
30
continue
31
while (
32
left <= len(indexes) - 2
33
and transactions[indexes[left]].time < t.time - 60
34
): # O(60) time
35
left += 1
36
while (
37
right <= len(indexes) - 2
38
and transactions[indexes[right + 1]].time <= t.time + 60
39
): # O(60) time
40
right += 1
41
for i in range(left, right + 1): # O(120) time
42
if transactions[indexes[i]].city != t.city:
43
res.append(
44
"{},{},{},{}".format(t.name, t.time, t.amount, t.city)
45
)
46
break
47

48
return res

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0