1. 題目
如果出現下述兩種情況,交易 可能無效:
- 交易金額超過 ¥1000
- 或者,它和另一個城市中同名的另一筆交易相隔不超過 60 分鐘(包含 60 分鐘整)
每個交易字元串 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 之間的整數
複制
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/invalid-transactions
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
- 把4個變量分别取出,放入數組
- 兩重循環檢查即可
class Solution {
public:
vector<string> invalidTransactions(vector<string>& transactions) {
int n = transactions.size(), idx = 0, i, j = 0;
int time, amount;
vector<string> Na(n), Ct(n);
vector<int> Ti(n), Amt(n);
string name, city;
for(string& tr : transactions)
{
name = city = "";
time = amount = j = 0;
for(i = 0; i < tr.size(); i++)
{
if(tr[i] == ',')
{
j++;
continue;
}
if(j == 0)
name += tr[i];
else if(j == 1)
time = time*10+tr[i]-'0';
else if(j == 2)
amount = amount*10+tr[i]-'0';
else
city += tr[i];
}
Na[idx] = name;
Ct[idx] = city;
Ti[idx] = time;
Amt[idx++] = amount;
}
vector<bool> valid(n, true);
vector<string> ans;
for(i = 0; i < n; ++i)
{
if(Amt[i] > 1000)//金額超标
valid[i] = false;
for(j = 0; j < i; ++j)
{ //兩兩檢查,同一人,不同城市,間隔小于60,前後都判定無效
if(Na[i]==Na[j] && abs(Ti[i]-Ti[j]) <= 60 && Ct[i] != Ct[j])
{
valid[i] = false;
valid[j] = false;
}
}
}
for(i = 0; i < n; ++i)
if(!valid[i])
ans.push_back(Na[i]+","+to_string(Ti[i])+","+to_string(Amt[i])+","+Ct[i]);
return ans;
}
};
複制
120 ms 11.6 MB