列表

详情


1169. 查询无效交易

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

给定字符串数组交易清单 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"]

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: vector<string> invalidTransactions(vector<string>& transactions) { } };

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

上一题