কম্পিউটার

C++ এ একটি সাজানো অ্যারেতে উপস্থিত একটি অতিরিক্ত উপাদানের সূচক খুঁজুন


এই সমস্যায়, আমাদেরকে n এবং n+1 আকারের দুটি সাজানো অ্যারে arr1 এবং arr2 দেওয়া হয়েছে অতিরিক্ত উপাদান বাদে সমস্ত উপাদান একই সাথে। আমাদের কাজ হল একটি সাজানো অ্যারেতে উপস্থিত একটি অতিরিক্ত উপাদানের সূচী খুঁজে পাওয়া .

সমস্যা বর্ণনা: আমাদের n+1 আকারের অ্যারে থেকে একটি উপাদানের সূচী খুঁজে বের করতে হবে যা n আকারের অ্যারেতে নেই।

সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,

ইনপুট: arr1[n] ={3, 5, 7, 8, 9, 12}
arr2[n+1] ={3, 4, 5, 7, 8, 9, 12}

আউটপুট: 1

ব্যাখ্যা:

মান 4 সহ উপাদানটি অতিরিক্ত যা সূচক 1 এ রয়েছে।

সমাধান পদ্ধতি -

সমস্যার একটি সহজ সমাধান হল যে উভয় অ্যারে সাজানো হয় তা ব্যবহার করে। এবং শুধুমাত্র একটি উপাদানের সাথে যা সমান নয়, আমরা রৈখিক অনুসন্ধান করতে পারি এবং arr2 এ উপাদানটি খুঁজে পেতে পারি যেটি arr1[] এ নেই।

অ্যালগরিদম:

ধাপ 1: i -> 0 থেকে n+1,

এর জন্য লুপ

ধাপ 1.1: বিজোড় উপাদান খুঁজুন, যদি arr1[i] !=arr2[i], ব্রেক লুপ।

ধাপ 2: i এর মান ফেরত দিন।

আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,

উদাহরণ

#include <iostream>
using namespace std;

int findExtraElement(int arr1[], int arr2[], int n) {
   
   int i;
   for (i = 0; i < n; i++)
      if (arr1[i] != arr2[i])
         break;
   return i;
}

int main()
{
   int arr1[] = {3, 5, 7, 8, 9, 12};
   int arr2[] = {3, 4, 5, 7, 8, 9, 12};
   int n = sizeof(arr1) / sizeof(arr1[0]);
   int extraIndex = findExtraElement(arr1, arr2, n);
   cout<<"The extra element is at index ("<<extraIndex<<") and the value is "<<arr2[extraIndex];
   return 0;
}

আউটপুট

The extra element is at index (1) and the value is 4

এই সমাধানটি আরও কার্যকর অনুসন্ধান কৌশল ব্যবহার করে আরও ভাল করা যেতে পারে যা হল বাইনারী অনুসন্ধান লিনিয়ারের পরিবর্তে অ্যালগরিদমের গণনার সময় হ্রাস করুন:

আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,

উদাহরণ

#include <iostream>
using namespace std;

int findExtraElement(int arr1[], int arr2[], int n) {
   
   int extraIndex = n;
   int start = 0, end = n - 1;
   while (start <= end)
   {
      int mid = (start + end) / 2;
      if (arr2[mid] == arr1[mid])
         start = mid + 1;
      else
      {
         extraIndex = mid;
         end = mid - 1;
      }
   }
   return extraIndex;
}

int main()
{
   int arr1[] = {3, 5, 7, 8, 9, 12};
   int arr2[] = {3, 4, 5, 7, 8, 9, 12};
   int n = sizeof(arr1) / sizeof(arr1[0]);
   int extraIndex = findExtraElement(arr1, arr2, n);
   cout<<"The extra element is at index ("<<extraIndex<<") and the value is "<<arr2[extraIndex];
   return 0;
}

আউটপুট

The extra element is at index (1) and the value is 4

আরেকটি পদ্ধতি:

সমস্যা সমাধানের আরও একটি পদ্ধতি হল দুটি অ্যারের মধ্যে পরম পার্থক্য খুঁজে বের করা, যা অতিরিক্ত উপাদান। তারপরে আমাদের n+1 আকারের অ্যারেতে এই অতিরিক্ত উপাদানটির সূচক খুঁজে বের করতে হবে। এটি একটি অনুসন্ধান অ্যালগরিদম ব্যবহার করে করা যেতে পারে৷

আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,

উদাহরণ

#include <iostream>
using namespace std;

int calcArraysum(int arr[], int n){
   int sum = 0;
   for(int i = 0; i < n; i++)
      sum += arr[i];
   return sum;
}

int findExtraElement(int arr1[], int arr2[], int n) {
   
   int extraValue = calcArraysum(arr2, n+1) - calcArraysum(arr1, n);

   for (int i = 0; i < n; i++)
   {
      if (arr2[i] == extraValue)
         return i;
   }
   return -1;
}

int main()
{
   int arr1[] = {3, 5, 7, 8, 9, 12};
   int arr2[] = {3, 4, 5, 7, 8, 9, 12};
   int n = sizeof(arr1) / sizeof(arr1[0]);
   int extraIndex = findExtraElement(arr1, arr2, n);
   cout<<"The extra element is at index ("<<extraIndex<<") and the value is "<<arr2[extraIndex];
   return 0;
}

আউটপুট

The extra element is at index (1) and the value is 4

  1. C++ এ সাজানো অ্যারেতে 25% এর বেশি উপাদান উপস্থিত হচ্ছে

  2. C++ এ অ্যারের প্রতিটি উপাদানের জন্য নিকটতম মান খুঁজুন

  3. C++ এ রোটেটেড সর্টেড অ্যারেতে রোটেশন কাউন্ট খুঁজুন

  4. C++-এ অ্যারের প্রতিটি উপাদানের সারপাসার কাউন্ট খুঁজুন