मान लीजिए कि कुछ लेनदेन हैं। लेन-देन संभवतः अमान्य है यदि -
-
राशि $1000 से अधिक है, या;
-
अगर यह एक अलग शहर में एक ही नाम के साथ एक और लेनदेन के 60 मिनट के भीतर (और इसमें शामिल) होता है।
यहां प्रत्येक लेन-देन स्ट्रिंग लेनदेन [i] में अल्पविराम से अलग किए गए मान होते हैं जो लेन-देन के नाम, समय (मिनटों में), राशि और शहर का प्रतिनिधित्व करते हैं। हमारे पास लेन-देन की एक सूची है, लेन-देन की एक सूची खोजें जो संभवतः अमान्य हैं। तो अगर इनपुट ["alice,20,800,mtv", "bob,50,1200,mtv"] जैसा है, तो जवाब होगा ["bob,50,1200,mtv"]।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
सेट एस को परिभाषित करें। नक्शा परिभाषित करें मी
-
मैं के लिए 0 से t - 1 के आकार के बीच
-
एक्स:=टी[i]
-
अस्थायी:=स्ट्रिंग x का उपयोग कर नोड
-
j के लिए 0 से लेकर m के आकार तक [अस्थायी का नाम]
-
वाई:=एम [अस्थायी का नाम] [जे]
-
यदि y का शहर तापमान का शहर नहीं है और |y का समय - अस्थायी का समय| -=60
-
नोड y को सेट s में स्ट्रिंग के रूप में डालें, और x को s में डालें
-
-
-
यदि तापमान> 1000 की मात्रा है, तो s में x डालें
-
एम [अस्थायी का नाम] में अस्थायी डालें
-
-
सेट में आइटम लौटाएं
उदाहरण(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, ]