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
}