C++ 中的无效交易


假设有一些交易。如果满足以下条件,则交易可能无效:

  • 金额超过 1000 美元,或;

  • 如果它发生在另一个同名交易在不同城市进行的 60 分钟(含)之内。

这里每个交易字符串 transactions[i] 由逗号分隔的值组成,分别表示交易的名称、时间(以分钟为单位)、金额和城市。我们有一个交易列表,找到一个可能无效的交易列表。因此,如果输入类似于 ["alice,20,800,mtv", "bob,50,1200,mtv"],则答案将是 ["bob,50,1200,mtv"]。

为了解决这个问题,我们将遵循以下步骤:

  • 定义一个集合 s。定义一个映射 m

  • 对于 i 从 0 到 t 的大小减 1

    • x := t[i]

    • temp := 使用字符串 x 创建的节点

    • 对于 j 从 0 到 m[temp 的名称] 的大小

      • y := m[temp 的名称][j]

      • 如果 y 的城市不是 temp 的城市,并且 |y 的时间 - temp 的时间| <= 60

        • 将节点 y 作为字符串插入集合 s 中,并将 x 插入 s 中

    • 如果 temp 的金额 > 1000,则将 x 插入 s 中

    • 将 temp 插入 m[temp 的名称] 中

  • 返回集合 s 中的项目

示例(C++)

让我们看看以下实现,以更好地理解:

 在线演示

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Node{
   public:
   string name;
   string city;
   int time;
   int amount;
};
class Solution {
   public:
   Node getNode(string s){
      string temp = "";
      Node ret;
      int cnt = 0;
      for(int i = 0; i < s.size(); i++){
         if(s[i] == ','){
            if(cnt == 0){
               ret.name = temp;
            }
            else if(cnt == 1){
               ret.time = stoi(temp);
            }
            else if(cnt == 2){
               ret.amount = stoi(temp);
            } else {
               ret.city = temp;
            }
            cnt++;
            temp = "";
            continue;
         }
         temp += s[i];
      }
      ret.city = temp;
      return ret;
   }
   vector<string> invalidTransactions(vector<string>& t) {
      set <string >s;
      map <string ,vector < Node >> m;
      for(int i = 0; i < t.size(); i++){
         string x = t[i];
         Node temp = getNode(x);
         for(int j = 0; j < m[temp.name].size(); j++){
            Node y = m[temp.name][j];
            if(y.city != temp.city && abs(y.time - temp.time) <= 60){
               s.insert(y.name + "," + to_string(y.time) + "," + to_string(y.amount) + "," + y.city);
               s.insert(x);
            }
         }
         if(temp.amount > 1000){
            s.insert(x);
         }
         m[temp.name].push_back(temp);
      }
      vector <string> ret(s.begin(), s.end());
      return ret;
   }
};
main(){
   vector<string> v1 = {"alice,20,800,mtv","bob,50,1200,mtv"};
   Solution ob;
   print_vector(ob.invalidTransactions(v1));
}

输入

["alice,20,800,mtv","bob,50,1200,mtv"]

输出

[bob,50,1200,mtv, ]

更新于: 2020 年 5 月 2 日

170 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始
广告

© . All rights reserved.