题目如下:
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.
Each transaction string
transactions[i]
consists of comma separated values representing the name, time (in minutes), amount, and city of the transaction.Given a list of
transactions
, 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 between1
and10
.- Each
{time}
consist of digits, and represent an integer between0
and1000
.- Each
{amount}
consist of digits, and represent an integer between0
and2000
.
解题思路:题目不难,但是坑多。我的方法是以name为key值,把每个人的交易记录存入字典中,然后遍历每个人的交易记录。每找到一个不合法的记录,再用这个记录和这个人其他所有的记录比较,直到找出所有符合条件的结果为止。
代码如下:
class Solution(object): def invalidTransactions(self, transactions): """ :type transactions: List[str] :rtype: List[str] """ def cmpf(v1,v2): lv1 = v1.split(',') lv2 = v2.split(',') return int(lv1[1]) - int(lv2[1]) transactions.sort(cmp = cmpf) res = [] dic = {} dic_invalid = {} for transaction in transactions: if transaction == 'lee,158,987,mexico': pass n, t, a, c = transaction.split(",") if int(a) > 1000: if transaction not in dic_invalid: res.append(transaction) dic_invalid[transaction] = 1 if n in dic: for hn,ht,ha,hc in dic[n]: if hc != c and (int(t) - int(ht)) <= 60: tran = hn + ',' + ht + ',' + ha + ',' + hc if tran not in dic_invalid: dic_invalid[tran] = 1 res.append(tran) if transaction not in dic_invalid: res.append(transaction) dic_invalid[transaction] = 1 dic[n] = dic.setdefault(n,[]) + [(n,t,a,c)] return res