N আকারের একটি ইন্টিজার অ্যারে দেওয়া আছে। L এবং R ভেরিয়েবল ১ এবং N-এর মধ্যবর্তী একটি রেঞ্জ নির্ধারণ করে। লক্ষ্য হল L এবং R রেঞ্জে পড়া ন্যূনতম উপাদানগুলোর সংখ্যা বের করা (L>=1 এবং R<=N)।
রেঞ্জ L এবং R-এ পড়া উপাদানগুলোর মধ্যে ন্যূনতমটি বের করা হয়। আবার সেই রেঞ্জ ট্রাভার্স করে যেসব উপাদান ন্যূনতমের সমান, তাদের গণনা করা হয়।
উদাহরণ
ইনপুট: arr[] = { 1,2,3,0,3,2,0,1 }, N=8, L=2, R=5
আউটপুট: রেঞ্জে ন্যূনতম উপাদানের সংখ্যা: ১
ব্যাখ্যা: L(1) থেকে R(5) রেঞ্জে arr[1] থেকে arr[4]: {2,3,0,3}। ন্যূনতম ০। ০-এর সংখ্যা ১।
ইনপুট: arr[] = { 1,2,3,0,3,2,0,1 }, N=8, L=3, R=8
আউটপুট: রেঞ্জে ন্যূনতম উপাদানের সংখ্যা: ২
ব্যাখ্যা: L(3) থেকে R(8) রেঞ্জে arr[2] থেকে arr[7]: {3,0,3,2,0,1}। ন্যূনতম ০। ০-এর সংখ্যা ২।
অ্যাপ্রোচ
- ইন্টিজার অ্যারে arr[] নেওয়া হয়।
- L, R রেঞ্জ ভেরিয়েবল। count রেঞ্জে ন্যূনতমের সংখ্যা।
countSmallest(int arr[], int n, int l, int r)ফাংশন অ্যারে, দৈর্ঘ্য, L, R গ্রহণ করে রেঞ্জে ন্যূনতমের গণনা রিটার্ন করে।- smallest = arr[l], count=0।
- যদি l<0 এবং r>=n হলে ০ রিটার্ন (অবৈধ রেঞ্জ)।
- for লুপে i=l-1 থেকে r-1 পর্যন্ত: smallest আপডেট করা হয়।
- আবার for লুপে i=l-1 থেকে r-1: arr[i]==smallest হলে count++।
উদাহরণ কোড
#include <bits/stdc++.h>
using namespace std;
int countSmallest(int arr[], int n, int l, int r) {
int smallest = arr[l];
int count = 0;
if (l < 0 && r >= n) return 0;
for (int i = l-1; i < r; i++) {
if (arr[i] <= smallest) smallest = arr[i];
}
for (int i = l-1; i < r; i++) {
if (arr[i] == smallest) ++count;
}
return count;
}
int main() {
int arr[] = { 3,2,1,1,2,3 };
int n = 6;
int L = 1, R = 5;
int count = countSmallest(arr, n, L, R);
cout << endl << "Count of number of smallest in given range:" << count;
L = 3, R = 4;
count = countSmallest(arr, n, L, R);
cout << endl << "Count of number of smallest in given range:" << count;
return 0;
}
আউটপুট
Count of number of smallest in given range: 2 Count of number of smallest in given range: 2