কম্পিউটার টিউটোরিয়াল

C++-এ নির্দিষ্ট আকারের সাব-অ্যারেতে সর্বোচ্চ অনন্য পূর্ণসংখ্যা


এই সমস্যায়, আমাদের একটি n আকারের অ্যারে এবং একটি সংখ্যা M দেওয়া আছে। আমাদের কাজ হলো একটি প্রোগ্রাম তৈরি করা যা নির্দিষ্ট আকারের সাব-অ্যারেতে সর্বোচ্চ অনন্য পূর্ণসংখ্যা বের করবে।

এখানে আমাদের M আকারের সাব-অ্যারেটি খুঁজে বের করতে হবে যেটিতে সর্বোচ্চ অনন্য উপাদান রয়েছে।

সমস্যা বুঝতে নিচের উদাহরণটি দেখুন,

ইনপুট − অ্যারে = {4, 1, 2, 1 , 4, 3}. M = 4

আউটপুট − 4

ব্যাখ্যা −

আকার ৪-এর সকল সম্ভাব্য সাব-অ্যারে কম্বিনেশন: {4, 1, 2, 1} = ৩টি অনন্য উপাদান {1, 2, 1, 4} = ৩টি অনন্য উপাদান {2, 1, 4, 3} = ৪টি অনন্য উপাদান

এই সমস্যা সমাধানের জন্য, আমরা সাধারণভাবে M আকারের সকল সাব-অ্যারে তৈরি করে প্রতিটিতে অনন্য উপাদান গণনা করব। এবং অনন্য উপাদানের সংখ্যা গ্লোবাল সর্বোচ্চের চেয়ে বড় কিনা তা যাচাই করে সর্বোচ্চ মানটি সংরক্ষণ করব। কিন্তু এই সমাধান দক্ষ নয়।

একটি ভালো সমাধান হলো স্লাইডিং উইন্ডো টেকনিক ব্যবহার করা। এতে আমরা M আকারের একটি উইন্ডো তৈরি করি এবং বর্তমান উইন্ডোর অনন্য উপাদানগুলো সংরক্ষণের জন্য একটি হ্যাশ টেবিল ব্যবহার করব।

উইন্ডোটি নিচেরভাবে তৈরি করব −

  • M আকারের একটি উইন্ডো তৈরি করে উপাদানগুলো হ্যাশ ম্যাপে সংরক্ষণ করুন।

  • এরপর উইন্ডোটি (M+1) তম উপাদানের অবস্থানে সরিয়ে προηγের উইন্ডোর উপাদানটি বাদ দিন।

উদাহরণ থেকে এই সমাধানটি ভালোভাবে বুঝতে নিচের টেবিলটি দেখুন −

অ্যারে = {4, 1, 2, 1, 4, 3}

উইন্ডো আকার, M = 4.

উইন্ডোহ্যাশ ম্যাপঅনন্য উপাদানের সংখ্যাযোগ করা উপাদানবাদ দেওয়া উপাদান
{4,1,2,1}4,1,23--
{1,2,1,4}1,2,4344
{2,1,4,3}2,1,4,3431

এই সমাধানটি দেখাচ্ছে উইন্ডো এবং হ্যাশ ম্যাপ কীভাবে গঠিত হয় এবং অনন্য উপাদান কীভাবে গণনা করা হয়।

উদাহরণ

নির্দিষ্ট আকারের সাব-অ্যারেতে সর্বোচ্চ অনন্য পূর্ণসংখ্যা বের করার প্রোগ্রাম −

 

#include<bits/stdc++.h> using namespace std; int maxUniqueElement(int a[],int N,int M){    map<int,int> hashMap;    int uniqueCountWindow=0;    int uniqueCount=0;    for(int i=0;i<M;i++) {       if(hashMap.find(a[i])==hashMap.end()) {          hashMap.insert(make_pair(a[i],1));          uniqueCountWindow++;       }       else          hashMap[a[i]]++;       }       uniqueCount = uniqueCountWindow;       for(int i=M;i<N;i++) {          if(hashMap[a[i-M]]==1) {             hashMap.erase(a[i-M]);             uniqueCountWindow--;          }          else             hashMap[a[i-M]]--;             if(hashMap.find(a[i])==hashMap.end()){                hashMap.insert(make_pair(a[i],1));                uniqueCountWindow++;             }             else                hashMap[a[i]]++;                uniqueCount=max(uniqueCount,uniqueCountWindow);          }       return uniqueCount; } int main(){    int arr[] = {4, 1 ,2, 1, 4, 3};    int M=4;    int N=sizeof(arr)/sizeof(arr[0]);    cout<<"The maximum number of unique elements in sub-array of size "<<M<<" is "<<maxUniqueElement(arr,N,M)<<endl; }

আউটপুট

The maximum number of unique elements in sub-array of size 4 is 4

  1. C++-এ অ্যারেতে arr[i] % arr[j] এর সর্বোচ্চ মান (Maximum Value of arr[i] % arr[j])

  2. C++-এ দেওয়া N-এর সমান যোগফল দেয় এমন সর্বোচ্চ প্রাইম সংখ্যা

  3. C++-এ দেওয়া গুণফল দিয়ে N পূর্ণসংখ্যার সর্বোচ্চ GCD

  4. C++ প্রোগ্রাম: সংখ্যার ইউনিক ফ্যাক্টরাইজেশন (পার্টিশন) জেনারেশন