# 1169 Invalid Transactions

A transaction is possibly invalid if:

• the amount exceeds `\$1000`, or;
• if it occurs within (and including) `60` minutes of another transaction with the same name in a different city.

You are given an array of strings `transaction` where `transactions[i]` consists of comma-separated values representing the name, time (in minutes), amount, and city of the transaction.

Return a list of `transactions` that are possibly invalid. You may return the answer in any order.

Example 1:

``````Input: transactions = ["alice,20,800,mtv","alice,50,100,beijing"]
Output: ["alice,20,800,mtv","alice,50,100,beijing"]
Explanation: The first transaction is invalid because the second transaction
occurs within a difference of 60 minutes, have the same name and is in a
different city. Similarly the second one is invalid too.
``````

Example 2:

``````Input: transactions = ["alice,20,800,mtv","alice,50,1200,mtv"]
Output: ["alice,50,1200,mtv"]
``````

Example 3:

``````Input: transactions = ["alice,20,800,mtv","bob,50,1200,mtv"]
Output: ["bob,50,1200,mtv"]
``````

Constraints:

• `transactions.length <= 1000`
• Each `transactions[i]` takes the form `"{name},{time},{amount},{city}"`
• Each `{name}` and `{city}` consist of lowercase English letters, and have lengths between `1` and `10`.
• Each `{time}` consist of digits, and represent an integer between `0` and `1000`.
• Each `{amount}` consist of digits, and represent an integer between `0` and `2000`.
 `````` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 `````` ``````class Solution: def invalidTransactions(self, transactions: List[str]) -> List[str]: # Group by name d = {} for t in transactions: name, time, amount, city = t.split(',') d.setdefault(name, []).append((int(time), int(amount), city)) # Sort by time for each name for n in d: d[n].sort(key=lambda t: t) res = [] for name, txns in d.items(): invalid = set() for i, txn in enumerate(txns): if txn > 1000: invalid.add((i, txn)) if i == 0: continue j = i - 1 while j >= 0: prev = txns[j] if txn - prev > 60: break if txn != prev: invalid.add((i, txn)) invalid.add((j, prev)) j -= 1 for i in invalid: res.append('{},{},{},{}'.format(name, *i)) return res``````