Computer >> Máy Tính >  >> Lập trình >> C ++

Giao dịch không hợp lệ trong C ++

Giả sử có một số giao dịch. Giao dịch có thể không hợp lệ nếu -

  • Số tiền vượt quá $ 1000 hoặc;

  • Nếu nó xảy ra trong vòng (và bao gồm) 60 phút của một giao dịch khác có cùng tên ở một thành phố khác.

Ở đây, mỗi giao dịch chuỗi giao dịch [i] bao gồm các giá trị được phân tách bằng dấu phẩy thể hiện tên, thời gian (tính bằng phút), số tiền và thành phố của giao dịch. Chúng tôi có một danh sách các giao dịch, tìm một danh sách các giao dịch có thể không hợp lệ. Vì vậy, nếu đầu vào là ["alice, 20,800, mtv", "bob, 50,1200, mtv"], thì câu trả lời sẽ là ["bob, 50,1200, mtv"].

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một tập hợp s. Xác định bản đồ m

  • cho tôi trong phạm vi từ 0 đến kích thước của t - 1

    • x:=t [i]

    • temp:=nút sử dụng chuỗi x

    • cho j trong phạm vi 0 đến kích thước của m [tên của nhiệt độ]

      • y:=m [tên nhiệt độ] [j]

      • nếu thành phố của y không phải là thành phố tạm thời và | thời gian của y - thời gian tạm thời | - =60

        • chèn nút y vào tập s dưới dạng chuỗi và chèn x vào s

    • nếu số lượng tạm thời> 1000, thì hãy chèn x vào s

    • chèn tạm thời vào m [tên của nhiệt độ]

  • trả lại các mục trong bộ s

Ví dụ (C ++)

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#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));
}

Đầu vào

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

Đầu ra

[bob,50,1200,mtv, ]