কিছু ট্রানজ্যাকশন দেওয়া আছে। একটি ট্রানজ্যাকশন সম্ভবত অবৈধ হয় যদি:
- অ্যামাউন্ট $১০০০-এর বেশি হয়, অথবা
- একই নামে কিন্তু আলাদা শহরে ৬০ মিনিটের মধ্যে (৬০ মিনিট অন্তর্ভুক্ত) অন্য একটি ট্রানজ্যাকশন ঘটে।
প্রতিটি ট্রানজ্যাকশন স্ট্রিং transactions[i] হলো কমা-সেপারেটেড মান: নাম, সময় (মিনিটে), অ্যামাউন্ট, শহর। ট্রানজ্যাকশনগুলো যেকোনো অবৈধ ট্রানজ্যাকশন বের করুন। উদাহরণ: ["alice,20,800,mtv", "bob,50,1200,mtv"] হলে উত্তর ["bob,50,1200,mtv"]।
সমাধানের ধাপগুলো:
sনামের একটি সেট,mনামের একটি ম্যাপ সংজ্ঞায়িত করুন।i = 0থেকেt.size()-1পর্যন্ত:x := t[i]temp := xস্ট্রিং থেকে নোড বানান।j = 0থেকেm[temp.name].size()-1পর্যন্ত:y := m[temp.name][j]- যদি
y.city != temp.cityএবং|y.time - temp.time| <= 60:y-কে স্ট্রিং হিসেবেs-এ ঢোকান,x-কেওs-এ ঢোকান।
- যদি
temp.amount > 1000,x-কেs-এ ঢোকান। temp-কেm[temp.name]-এ ঢোকান।
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, ]