Skip to content

Latest commit

 

History

History
87 lines (69 loc) · 2.94 KB

1169.md

File metadata and controls

87 lines (69 loc) · 2.94 KB

Invalid Transactions

题目

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.

思路

总结:
	全是业务逻辑....大概读懂题目就是关键吧。
	题目:给定一个string的数组['{name},{time},{amount},{city}'...]
	每一个string表示一笔交易
	如果amount>1000表示无效交易	
	如果同一个人在不同的城市操作且两次操作时间小于等于60分钟,两笔都是无效交易。
	返回所有的无效交易。

代码

func invalidTransactions(transactions []string) []string {
    res := []string{}
    resMap := make(map[string]struct{}, 0)
    mp := make(map[string][]string, 0)
    for i := 0; i < len(transactions); i++ {
        data := strings.Split(transactions[i], ",")
        amount ,_ := strconv.Atoi(data[2])
        if amount > 1000 {
            resMap[transactions[i]] = struct{}{}
        }
        if _, ok := mp[data[0]]; !ok {
            mp[data[0]] = []string{transactions[i]}
        } else {
            for _, str := range mp[data[0]] {
                line := strings.Split(str, ",")
                time1 ,_ := strconv.Atoi(data[1])
                time2 ,_ := strconv.Atoi(line[1])
                time := time1 - time2
                time = int(math.Abs(float64(time)))
                //fmt.Println(transactions[i], str, time)
                if line[3] != data[3] && time <= 60 {
                    resMap[transactions[i]] = struct{}{}
                    resMap[str] = struct{}{}
                }
            }
            mp[data[0]] = append(mp[data[0]], transactions[i])
        }
    }
    for k, _ := range resMap {
        res = append(res, k)
    }
    return res
}