天天看點

LeetCode 1169. 查詢無效交易

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