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

C++-এ ঠিক Kটি ডISTINCT ইন্টিজার বিশিষ্ট সাবঅ্যারে গণনা

সমস্যা বিবরণ

একটি অ্যারে A দেওয়া থাকলে, যেসব সংলগ্ন সাবঅ্যারেতে ঠিক Kটি ভিন্ন ইন্টিজার থাকে তাদের সংখ্যা বের করতে হবে।

উদাহরণ

A = [1,2,3,1,4], K = 3 → আউটপুট = 4 (সাবঅ্যারে: [1,2,3], [1,2,3,1], [2,3,1], [3,1,4])

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

  • স্লাইডিং উইন্ডো + atMost(K) - atMost(K-1) ফর্মুলা ব্যবহার করা হয়।
  • atMost(k) ফাংশন দিয়ে কতগুনো সাবঅ্যারেতে hoogst kটি ডISTINCT ইন্টিজার আছে তা বের করা হয়।
  • ফ্রিকোয়েন্সি ম্যাপ দিয়ে উইন্ডো মেইনটেইন করা হয়।

C++ বাস্তবায়ন

#include <bits/stdc++.h>
using namespace std;

class Solution {
    int atMost(vector<int>& a, int k) {
        int j = 0, ans = 0;
        unordered_map<int, int> m;
        
        for (int i = 0; i < a.size(); i++) {
            if (!m[a[i]]++) k--;
            while (k < 0) {
                if (!--m[a[j]]) k++;
                j++;
            }
            ans += (i - j + 1);
        }
        return ans;
    }
    
public:
    int subarraysWithKDistinct(vector<int>& a, int k) {
        return atMost(a, k) - atMost(a, k - 1);
    }
};

int main() {
    Solution ob;
    vector<int> v = {1,2,3,1,4};
    cout << ob.subarraysWithKDistinct(v, 3);
    return 0;
}

ইনপুট ও আউটপুট

ইনপুট: {1,2,3,1,4}, 3

আউটপুট: 4

  1. C++-এ d-ডিজিটের ধনাত্মক পূর্ণসংখ্যা যেগুলোতে ০ ডিজিট থাকে (Count d-digit Numbers with Digit 0)

  2. C++-এ k যেন ম্যাক্সিমাম এলিমেন্ট হয় এমন নন-ওভারল্যাপিং সাবঅ্যারের লেন্থের ম্যাক্সিমাম সাম

  3. শূন্য সম যোগফল वाले সব সাবঅ্যারে প্রিন্ট করা C++-তে

  4. C++-এ ifstream ব্যবহার করে টেক্সট ফাইল থেকে ইন্টিজার পড়া