আমাদের একটি পজিটিভ ইন্টিজার অ্যারে দেওয়া আছে। লক্ষ্য হল এমন জোড়া (A, B) বের করা যাতে A-এর ফ্রিকোয়েন্সি B এবং B-এর ফ্রিকোয়েন্সি A। (দ্রষ্টব্য: এটি পূর্ববর্তী আর্টিকেলের সাথে মিলতা রাখে কিন্তু আলাদা শর্তে।)
উদাহরণ
ইনপুট: arr[] = {3, 3, 3, 5, 5, 6, 6}
আউটপুট: ১
ব্যাখ্যা: শুধু (3,3) ভ্যালিড।
ইনপুট: arr[] = {3, 3, 3, 3, 3, 5, 5, 5, 6, 6}
আউটপুট: ৩
ব্যাখ্যা: ভ্যালিড জোড়া: (3,3), (5,5), (3,5)।
অ্যালগরিদম (অনঅর্ডার্ড ম্যাপ ব্যবহার করে)
- অ্যারে এবং এর আকার ইনপুট নিন।
unordered_mapদিয়ে ফ্রিকোয়েন্সি গণনা করুন।- ম্যাপ ট্রাভার্স করুন: প্রতিটি এলিমেন্ট
startএবং এর ফ্রিকোয়েন্সিendজন্য,1থেকেendপর্যন্ত চেক করুন যেum[j] >= startকিনা। যদি হয় তবে কাউন্ট বাড়ান। - মোট কাউন্ট ফেরত দিন।
C++ বাস্তবায়ন
#include <bits/stdc++.h>
using namespace std;
int frequency_other_value(int arr[], int len) {
int count = 0;
unordered_map<int, int> um;
for (int i = 0; i < len; ++i) {
um[arr[i]]++;
}
for (auto it : um) {
int start = it.first;
int end = it.second;
for (int j = 1; j <= end; j++) {
if (um[j] >= start) count++;
}
}
return count;
}
int main() {
int arr[] = {3, 3, 3, 5, 5, 6, 6};
int size = sizeof(arr) / sizeof(arr[0]);
cout << "Count of pairs in an array such that frequency of one is at least value of other are: "
<< frequency_other_value(arr, size);
return 0;
}
আউটপুট
Count of pairs in an array such that frequency of one is at least value of other are: 1