কম্পিউটার

C++ এ অমিল সেট করুন


ধরুন একটি সেট S আছে যেটিতে মূলত 1 থেকে n পর্যন্ত সংখ্যা রয়েছে। কিন্তু দুর্ভাগ্যবশত, কিছু ত্রুটির কারণে, সেটের একটি নম্বর সেটের অন্য নম্বরে সদৃশ হয়ে গেছে, যার ফলে একটি সংখ্যার পুনরাবৃত্তি এবং অন্য সংখ্যাটি নষ্ট হয়ে গেছে।

এখন যদি আমাদের কাছে nums নামে একটি অ্যারে থাকে যা ত্রুটির পরে এই সেটের ডেটা স্থিতিকে প্রতিনিধিত্ব করে। আমাদের কাজ হল সংখ্যাটি দুবার ঘটে তা খুঁজে বের করা এবং তারপরে মিস করা নম্বরটি খুঁজে বের করা। একটি অ্যারের আকারে ফলাফল ফেরত দিন।

সুতরাং, ইনপুট যদি [1,2,3,4,4,6] এর মত হয়, তাহলে আউটপুট হবে [4,5]

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

  • আকার 2

    এর একটি বিন্যাস সংজ্ঞায়িত করুন
  • s1 :=A

    এর সকল সংখ্যার যোগফল
  • n :=A

    এর আকার
  • exp_sum :=(n * (n + 1))

  • আরম্ভ করার জন্য i :=0, যখন i

    • যদি A[|A[i]| - 1]> 0, তারপর −

      • A[|A[i]| - 1] =-A[|A[i]| - 1]

    • অন্যথায়

      • v[0] :=|A[i]|

      • লুপ থেকে বেরিয়ে আসুন

  • v[1] :=v[0] - (s1 - exp_sum)

  • প্রত্যাবর্তন v

উদাহরণ

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

#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 Solution {
public:
   vector<int> findErrorNums(vector<int>& A) {
      vector<int> v(2);
      long long int s1 = accumulate(A.begin(), A.end(), 0);
      int n = A.size();
      long long int exp_sum = (n * (n + 1)) / 2;
      for (int i = 0; i < n; i++) {
         if (A[abs(A[i]) - 1] > 0) {
            A[abs(A[i]) - 1] = -A[abs(A[i]) - 1];
         }
         else {
            v[0] = abs(A[i]);
         break;
         }
      }
      v[1] = v[0] - (s1 - exp_sum);
      return v;
   }
};
main(){
   Solution ob;
   vector<int> v = {1,2,3,4,4,6};
   print_vector(ob.findErrorNums(v));
}

ইনপুট

{1,2,3,4,4,6}

আউটপুট

[4, 5, ]

  1. C++ STL এ মানচিত্র বনাম সেট করুন

  2. C++ STL-এ low_bound() ফাংশন সেট করুন

  3. C++ STL-এ find() ফাংশন সেট করুন

  4. STL-এ সেট_ইউনিয়ন বাস্তবায়নের জন্য C++ প্রোগ্রাম