• Leetcode 1169. 查询无效交易(如果数据量不大,这种题还是得暴力枚举解决)


    在这里插入图片描述
    如果出现下述两种情况,交易 可能无效:

    • 交易金额超过 $1000
    • 或者,它和 另一个城市 中 同名 的另一笔交易相隔不超过 60 分钟(包含 60 分钟整)

    给定字符串数组交易清单 transaction 。每个交易字符串 transactions[i] 由一些用逗号分隔的值组成,这些值分别表示交易的名称,时间(以分钟计),金额以及城市。

    返回 transactions,返回可能无效的交易列表。你可以按 任何顺序 返回答案。

    示例 1:

    输入:transactions = ["alice,20,800,mtv","alice,50,100,beijing"]
    输出:["alice,20,800,mtv","alice,50,100,beijing"]
    解释:第一笔交易是无效的,因为第二笔交易和它间隔不超过 60 分钟、名称相同且发生在不同的城市。同样,第二笔交易也是无效的。
    
    • 1
    • 2
    • 3

    示例 2:

    输入:transactions = ["alice,20,800,mtv","alice,50,1200,mtv"]
    输出:["alice,50,1200,mtv"]
    
    • 1
    • 2

    示例 3:

    输入:transactions = ["alice,20,800,mtv","bob,50,1200,mtv"]
    输出:["bob,50,1200,mtv"]
     
    
    • 1
    • 2
    • 3

    提示:

    • transactions.length <= 1000
    • 每笔交易 transactions[i] 按 “{name},{time},{amount},{city}” 的格式进行记录
    • 每个交易名称 {name} 和城市 {city} 都由小写英文字母组成,长度在 1 到 10 之间
    • 每个交易时间 {time} 由一些数字组成,表示一个 0 到 1000 之间的整数
    • 每笔交易金额 {amount} 由一些数字组成,表示一个 0 到 2000 之间的整数

    主要思路:

    1. 先字符串分割
    2. 然后根据要求直接暴力枚举

    Code:

    class Solution {
    public:
        void str_split(const std::string & src, const std::string & sep, std::vector<string> & vec_str)
        {
            std::string::size_type start = 0;
            int i=0;
            for(std::string::size_type end = src.find(sep, start); end != std::string::npos; end = src.find(sep, start))
            {
                if(end > start)
                {
                    
                    string str=src.substr(start, end - start);
                    vec_str.push_back(str);
                }
                start = end + sep.length();
            }
            if(start < src.length())
            {
                
                string str=src.substr(start, src.length() - start);
                vec_str.push_back(str);
                
            }
        }
        vector<string> invalidTransactions(vector<string>& transactions) {
            vector<string>res;
            vector<vector<string>>vec;
            for(int i=0;i<transactions.size();i++)
            {
                vector<string>temp;
                str_split(transactions[i],",",temp);
                vec.push_back(temp);
            }
            
            map<string,int>mymap;
            for(int i=0;i<vec.size();i++)
            {
                vector<string>sub=vec[i];
                if(atoi(sub[2].c_str())>1000)
                {
                    string str=sub[0]+","+sub[1]+","+sub[2]+","+sub[3];
                    //  res.push_back(str);
                    mymap.insert(pair<string,int>(str,0));
                }
                else
                {
                    for(int j=0;j<vec.size();j++)
                    {
                        if(j==i)
                            continue;
                        vector<string>sub2=vec[j];
                        if(sub2[3]!=sub[3])
                        {
                            if(sub2[0]==sub[0])
                            {
                                if(abs(atoi(sub[1].c_str())-atoi(sub2[1].c_str()))<=60)
                                {
                                    string str=sub2[0]+","+sub2[1]+","+sub2[2]+","+sub2[3];
                                    
                                    string str2=sub[0]+","+sub[1]+","+sub[2]+","+sub[3];
                                    mymap.insert(pair<string,int>(str,0));
                                    mymap.insert(pair<string,int>(str2,0));
                                    
                                }
                            }
                        }
                    }
                }
            }
            
            map<string,int>::iterator it;
            
            for(it=mymap.begin();it!=mymap.end();++it)
            {
                int cnt=count(transactions.begin(),transactions.end(),it->first);
                for(int j=0;j<cnt;j++)
                    res.push_back(it->first);
            }
            return res;
            
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
  • 相关阅读:
    字符串划分
    biquad滤波器的设计
    cv2.fillPoly的大坑
    【C++】stack和queue
    Java 变量作用域、构造方法官方教程
    自学Python第二十三天- redis 库
    GB28181学习(四)——网络设备信息查询
    【力扣练习题】加一
    2386. 找出数组的第 K 大和 (每日一难phase2-day2)
    国际教材概念基础
  • 原文地址:https://blog.csdn.net/qq_45662588/article/details/125468053