1169. Invalid Transactions

本文介绍了一种算法,用于从交易记录中检测可能的无效交易。如果交易金额超过1000美元,或者在60分钟内同一人在不同城市进行另一笔交易,则认为该交易可能无效。算法接收交易列表作为输入,并返回所有可能无效的交易。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 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.
class Solution(object):
    def invalidTransactions(self, transactions):
        """
        :type transactions: List[str]
        :rtype: List[str]
        """
        d = {}
        for idx,s in enumerate(transactions):
            name,time,amount,city = s.split(',')
            if name not in d: d[name]=[]
            d[name].append((idx, int(time),int(amount),city))
        for name in d:
            d[name].sort(key=lambda s:s[1])
        
        added = set()
        res = []
        for name in d:
            for i in range(len(d[name])):
                flag = False
                idx,t,a,c = d[name][i]
                for j in range(i+1, len(d[name])):
                    idx2,t2,a2,c2 = d[name][j]
                    if t2-t>60: continue
                    if c2!=c:
                        res.append(transactions[idx2])
                        added.add(idx2)
                        flag = True
                if flag or a>1000:
                    res.append(transactions[idx])
                    added.add(idx)
        return list(set(res))
    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值