leetcode 1169. 查询无效交易(C++)

如果出现下述两种情况,交易 可能无效

  • 交易金额超过 ¥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 之间的整数

C++

struct Trans
{
    string name;
    int time;
    int amount;
    string city;
};

class Solution {
public:
    vector<string> invalidTransactions(vector<string>& transactions) 
    {
        set<string> ans;
        vector<Trans> tmp;
        for(auto str:transactions)
        {
            vector<int> idx;
            for(int i=0;i<str.length();i++)
            {
                if(','==str[i])
                {
                    idx.push_back(i);
                }
                if(3==idx.size())
                {
                    break;
                }
            }
            string name=str.substr(0,idx[0]);
            int time=atoi(str.substr(idx[0]+1,idx[1]-idx[0]-1).c_str());
            int amount=atoi(str.substr(idx[1]+1,idx[2]-idx[1]-1).c_str());
            string city=str.substr(idx[2]+1);
            Trans trans;
            trans.name=name;
            trans.time=time;
            trans.amount=amount;
            trans.city=city;
            tmp.push_back(trans);
        }
        int n=transactions.size();
        for(int i=0;i<n;i++)
        {
            if(tmp[i].amount>1000)
            {
                ans.insert(transactions[i]);
            }
            for(int j=i+1;j<n;j++)
            {
                if(tmp[i].name==tmp[j].name && tmp[i].city!=tmp[j].city && abs(tmp[i].time-tmp[j].time)<=60)
                {
                    ans.insert(transactions[i]);
                    ans.insert(transactions[j]);
                }
            }
        }
        return vector<string>(ans.begin(),ans.end());
        
    }
};

 


版权声明:本文为qq_27060423原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。