class Solution {
public:
vector<string> invalidTransactions(vector<string>& transactions) {
}
};
1169. 查询无效交易
如果出现下述两种情况,交易 可能无效:
$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}
都由小写英文字母组成,长度在 1
到 10
之间{time}
由一些数字组成,表示一个 0
到 1000
之间的整数{amount}
由一些数字组成,表示一个 0
到 2000
之间的整数原站题解
golang 解法, 执行用时: 8 ms, 内存消耗: 6.2 MB, 提交时间: 2023-09-08 17:05:14
type transaction struct { name string time int amount int city string idx int } func invalidTransactions(transactions []string) []string { m := make(map[string][]transaction) res := []string{} for i := range transactions { t := strings.Split(transactions[i], ",") name, city := t[0], t[3] time, _ := strconv.Atoi(t[1]) amount, _ := strconv.Atoi(t[2]) m[name] = append(m[name], transaction{name, time, amount, city, i}) } for _, t := range m { sort.Slice(t, func(i, j int) bool { return t[i].time < t[j].time }) last := 0 invalid := make(map[int]int) for i := range t { if t[i].amount > 1000 { invalid[t[i].idx]++ } if i == 0 {continue} if t[i].time - t[last].time > 60 { last++ } for j := last; j < i; j++ { if t[i].time - 60 <= t[j].time && t[i].city != t[j].city { invalid[t[i].idx]++ invalid[t[j].idx]++ } } } for i := range invalid { res = append(res, transactions[i]) } } return res }
php 解法, 执行用时: 428 ms, 内存消耗: 20 MB, 提交时间: 2023-09-08 16:55:08
class Solution { /** * @param String[] $transactions * @return String[] */ function invalidTransactions($transactions) { $data = []; foreach ($transactions as $k => $item) { // {name},{time},{amount},{city} $transactions[$k] = explode(',', $item); } foreach ($transactions as $item1) { foreach ($transactions as $k => $item2) { if ($item2[2] > 1000) { $data[$k] = implode(',', $item2); } elseif ($item1[0] == $item2[0] && abs($item1[1] - $item2[1]) <= 60 && $item1[3] != $item2[3]) { $data[$k] = implode(',', $item2); } } } return array_values($data); } }
python3 解法, 执行用时: 72 ms, 内存消耗: 16.8 MB, 提交时间: 2023-09-08 16:38:23
class Solution: def invalidTransactions(self, transactions: List[str]) -> List[str]: trans = [x.split(',') for x in transactions] res = [] for i in range(len(trans)): name, time, money, city = trans[i] time = int(time) if int(money) > 1000: res.append(transactions[i]) continue for j in range(len(trans)): if i == j: continue; name1, time1, money1, city1 = trans[j] if name1 == name and city1 != city and abs(int(time1) - time) <= 60: res.append(transactions[i]) break; return res