目录

1169:查询无效交易(1658 分)

力扣第 151 场周赛第 1 题

题目

如果出现下述两种情况,交易 可能无效

  • 交易金额超过 $1000
  • 或者,它和 另一个城市同名 的另一笔交易相隔不超过 60 分钟(包含 60 分钟整)

给定字符串数组交易清单 transaction 。每个交易字符串 transactions[i] 由一些用逗号分隔的值组成,这些值分别表示交易的名称,时间(以分钟计),金额以及城市。

返回 transactions,返回可能无效的交易列表。你可以按 任何顺序 返回答案。

示例 1:

输入:transactions = ["alice,20,800,mtv","alice,50,100,beijing"]
输出:["alice,20,800,mtv","alice,50,100,beijing"]
解释:第一笔交易是无效的,因为第二笔交易和它间隔不超过 60 分钟、名称相同且发生在不同的城市。同样,第二笔交易也是无效的。

示例 2:

输入:transactions = ["alice,20,800,mtv","alice,50,1200,mtv"]
输出:["alice,50,1200,mtv"]

示例 3:

输入:transactions = ["alice,20,800,mtv","bob,50,1200,mtv"]
输出:["bob,50,1200,mtv"]

提示:

  • transactions.length <= 1000
  • 每笔交易 transactions[i]"{name},{time},{amount},{city}" 的格式进行记录
  • 每个交易名称 {name} 和城市 {city} 都由小写英文字母组成,长度在 110 之间
  • 每个交易时间 {time} 由一些数字组成,表示一个 01000 之间的整数
  • 每笔交易金额 {amount} 由一些数字组成,表示一个 02000 之间的整数

分析

数据范围不大,可以直接两重遍历判断每个交易是否有效。

解答

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
def invalidTransactions(self, transactions: List[str]) -> List[str]:
    def check(tr):
        name, time, amount, city = tr.split(',')
        if int(amount) > 1000:
            return True
        for tr2 in transactions:
            name2, time2, _, city2 = tr2.split(',')
            if name == name2 and city != city2 and abs(int(time) - int(time2)) <= 60:
                return True
        return False

    return [tr for tr in transactions if check(tr)]

92 ms