কম্পিউটার

C++ এ অবৈধ লেনদেন


ধরুন কিছু লেনদেন আছে। −

হলে একটি লেনদেন সম্ভবত অবৈধ
  • পরিমাণ $1000 ছাড়িয়ে গেছে, বা;

  • যদি এটি অন্য শহরে একই নামে অন্য লেনদেনের 60 মিনিটের মধ্যে (এবং সহ) ঘটে।

এখানে প্রতিটি লেনদেন স্ট্রিং লেনদেন[i] কমা দ্বারা বিভক্ত মান নিয়ে গঠিত যা লেনদেনের নাম, সময় (মিনিটের মধ্যে), পরিমাণ এবং শহরের প্রতিনিধিত্ব করে। আমাদের কাছে লেনদেনের একটি তালিকা আছে, লেনদেনের একটি তালিকা খুঁজে বের করুন যা সম্ভবত অবৈধ। তাই ইনপুট যদি হয় ["alice,20,800,mtv", "bob,50,1200,mtv"], তাহলে উত্তর হবে ["bob,50,1200,mtv"]৷

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • একটি সেট সংজ্ঞায়িত করুন। একটি মানচিত্র m

    সংজ্ঞায়িত করুন
  • আমি 0 থেকে t - 1

    এর পরিসরে
    • x :=t[i]

    • temp :=স্ট্রিং x

      ব্যবহার করে নোড
    • j এর জন্য রেঞ্জ 0 থেকে m[temp এর নাম]

      • y :=m[অস্থায়ী নাম[j]

      • যদি y এর শহর temp এর শহর না হয় এবং |y এর সময় - temp এর সময়| −=60

        • স্ট্রিং হিসাবে সেট s-এ নোড y সন্নিবেশ করান এবং s-এ x সন্নিবেশ করুন

    • যদি টেম্পের পরিমাণ> 1000 হয়, তাহলে s

      -এ x ঢোকান
    • m[temp এর নাম]

      -এ 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, ]

  1. C++ এ থ্রেডেড বাইনারি ট্রির ইনঅর্ডার ট্রাভার্সাল

  2. একটি পণ্য অ্যারে ধাঁধা (O(1) স্থান) C++?

  3. C++ এ regex_error

  4. C++ এ কম্বিনেশন