কম্পিউটার

C++ এ উচ্চতা অনুসারে সারি পুনর্গঠন


বিবেচনা করুন আমাদের কাছে সারিতে দাঁড়িয়ে থাকা লোকদের একটি এলোমেলো তালিকা রয়েছে৷ যদি প্রতিটি ব্যক্তিকে এক জোড়া পূর্ণসংখ্যা (h, k) দ্বারা বর্ণনা করা হয়, যেখানে h হল উচ্চতা এবং k হল তার সামনের মানুষের সংখ্যা, যাদের উচ্চতা h এর চেয়ে বেশি বা সমান। সারি পুনর্গঠনের জন্য আমাদের একটি পদ্ধতি নির্ধারণ করতে হবে। সুতরাং যদি প্রদত্ত অ্যারেটি [[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]] এর মতো হয় তবে আউটপুট হবে [[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]

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

  • নিম্নলিখিত তুলনা কৌশলের উপর ভিত্তি করে প্রদত্ত অ্যারে সাজান
    • যদি a[0] =b[0], তাহলে a[1]> b[1] ফেরত পাঠান, অন্যথায় a[0]
  • ans নামে একটি ভেক্টর তৈরি করুন
  • এর জন্য প্রদত্ত অ্যারের রেঞ্জ সাইজ 0
      পর্যন্ত
    • সন্নিবেশ করান ( ans + p[i, 1], p[i] এর প্রথম উপাদান) ans অ্যারেতে
  • উত্তর ফেরত দিন

উদাহরণ

আসুন আরও ভালোভাবে বোঝার জন্য নিচের বাস্তবায়ন দেখি −

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<auto> > v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << "[";
      for(int j = 0; j <v[i].size(); j++){
         cout << v[i][j] << ", ";
      }
      cout << "],";
   }
   cout << "]"<<endl;
}
bool cmp(vector <int> a, vector <int> b){
   if(a[0] == b[0])return a[1] > b[1];
      return a[0] < b[0];
}
class Solution {
public:
   vector<vector<int>> reconstructQueue(vector<vector<int>>& p) {
      sort(p.begin(), p.end(), cmp);
      vector < vector <int> > ans;
      for(int i = p.size()-1; i>=0; i--){
         ans.insert(ans.begin() + p[i][1], p[i]);
      }
      return ans;
   }
};
main(){
   Solution ob;
   vector<vector<int>> v = {{7,0}, {4,4}, {7,1}, {5,0}, {6,1}, {5,2}};
   print_vector(ob.reconstructQueue(v));
}

ইনপুট

[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]

আউটপুট

[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]

  1. C++ এ অ্যারের মানের ত্রিভুজাকার বিন্যাসের সর্বোচ্চ উচ্চতা

  2. C++ এ static_cast

  3. C++ এ একটি ভেক্টর বাছাই করা

  4. কিভাবে C++ এ একটি ভেক্টর শুরু করবেন?