# 1169. 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.

You are given an array of strings `transaction` where `transactions[i]` consists of comma-separated values representing the name, time (in minutes), amount, and city of the transaction.

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`.

``````class Solution {
public:
vector<string> invalidTransactions(vector<string>& transactions) {
vector<string> res;
unordered_set<string> st;
unordered_map<string, vector<vector<string>>> m;
unordered_map<string, int> cntMap;
for (string t : transactions) {
++cntMap[t];
istringstream iss(t);
vector<string> vec(4);
int i = 0;
while (getline(iss, vec[i++], ','));
if (stoi(vec[2]) > 1000) st.insert(t);
for (auto &a : m[vec[0]]) {
if (a[3] != vec[3] && abs(stoi(a[1]) - stoi(vec[1])) <= 60) {
st.insert(a[0] + "," + a[1] + "," + a[2] + "," + a[3]);
if (!st.count(t)) st.insert(t);
}
}
m[vec[0]].push_back(vec);
}
for (auto &a : cntMap) {
if (st.count(a.first)) {
for (int i = 0; i < a.second - 1; ++i) {
res.push_back(a.first);
}
}
}
res.insert(res.end(), st.begin(), st.end());
return res;
}
};
``````

Github 同步地址:

https://github.com/grandyang/leetcode/issues/1169

https://leetcode.com/problems/invalid-transactions/

https://leetcode.com/problems/invalid-transactions/discuss/366414/C%2B%2B-Hashtable

LeetCode All in One 题目讲解汇总(持续更新中…)

 微信打赏 Venmo 打赏
（欢迎加入博主的知识星球，博主将及时答疑解惑，并分享刷题经验与总结，试运营期间前五十位可享受半价优惠～）

×

Help us with donation