Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ธุรกรรมที่ไม่ถูกต้องใน C++


สมมติว่ามีการทำธุรกรรมบางอย่าง ธุรกรรมอาจไม่ถูกต้องหาก −

  • จำนวนเงินเกิน $1000 หรือ;

  • หากเกิดขึ้นภายใน (และรวมถึง) 60 นาทีของธุรกรรมอื่นที่มีชื่อเดียวกันในเมืองอื่น

ที่นี่แต่ละธุรกรรมสตริงธุรกรรม [i] ประกอบด้วยค่าที่คั่นด้วยเครื่องหมายจุลภาคแทนชื่อ เวลา (เป็นนาที) จำนวนเงิน และเมืองของธุรกรรม เรามีรายการธุรกรรม ค้นหารายการธุรกรรมที่อาจไม่ถูกต้อง ดังนั้นหากอินพุตเป็นเหมือน ["alice,20,800,mtv", "bob,50,1200,mtv"] คำตอบก็จะเป็น ["bob,50,1200,mtv"]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดชุด s กำหนดแผนที่ ม

  • สำหรับฉันในช่วง 0 ถึงขนาดของ t – 1

    • x :=t[i]

    • temp :=โหนดโดยใช้สตริง x

    • สำหรับ j ในช่วง 0 ถึงขนาด m[ชื่ออุณหภูมิ]

      • y :=m[ชื่ออุณหภูมิ][j]

      • ถ้าเมืองของ y ไม่ใช่เมืองของอุณหภูมิ และ |เวลาของ y – เวลาของอุณหภูมิ| −=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, ]