हमें एक सरणी arr[] दी गई है जिसमें पूर्णांक हैं और एक चर X है। लक्ष्य arr[] के उन सभी सबएरे की गिनती करना है जिनमें केवल वे तत्व हों जो X से कम या बराबर हों। उदाहरण के लिए यदि सरणी [1,2,3] है और X=2 तो सबएरे होंगे [1], [2] और [1,2]।
उदाहरण सहित समझ
इनपुट - arr[] = { 4,3,2,1,6 }; X=3
आउटपुट - उन सबएरे की संख्या जिनके तत्व X से कम या बराबर हैं: 6
व्याख्या - सबएरे होंगे:
[3], [2], [1], [3,2], [2,1], [3,2,1]
इनपुट - arr[] = { 3,6,2,7,1,8,5 }; X=5
आउटपुट - उन सबएरे की संख्या जिनके तत्व X से कम या बराबर हैं: 4
व्याख्या - सबएरे होंगे:
[3], [2], [1], [5]
प्रोग्राम में उपयोग किया गया दृष्टिकोण
हम मूल सरणी arr[] के समान आकार का एक बाइनरी सरणी temp_arr[] बना रहे हैं। यह बाइनरी सरणी में 1 होगा यदि संगत arr[i] X से कम या बराबर है, अन्यथा 0। अब temp_arr[] को ट्रैवर्स करें और लगातार 1's ( arr[] में X से कम तत्व) की जांच करें। ऐसी प्रत्येक सबएरे की लंबाई temp में संग्रहीत करें। लंबाई temp की एक सरणी के लिए। कुल सबएरे होंगे temp*(temp+1)/2। इसे कुल काउंट में जोड़ें और temp_arr[] के अंत तक जारी रखें।
- सरणी
arr[]और चरXलें। - फंक्शन
sub_X(int arr[], int size, int x)सरणी और x लेता है और केवल उन तत्वों वाले सबएरे की गिनती लौटाता है जो x से कम या बराबर हैं। - अस्थायी चर
tempऔर ऐसी सबएरे के अंतिम कुलcountके रूप में लें। arr[]के समान लंबाई का एक बाइनरी सरणीtemp_arr[]लें।- फॉर लूप का उपयोग करके i=0 से i<size तक सरणी
arr[]को ट्रैवर्स करें। - प्रत्येक तत्व
arr[i] <= xके लिए,temp_arr[i] = 1सेट करें अन्यथा 0। - फॉर लूप का उपयोग करके
temp_arr[]को ट्रैवर्स करें। - यदि कोई तत्व
temp_arr[i] == 1है। तो वर्तमान इंडेक्स i से सब लूप का उपयोग करके ट्रैवर्स करें जब तकtemp_arr[temp_2](temp_2 = i+1; temp_2 < size) 1 है। यदि 0 है तो सब लूप तोड़ें। - सभी 1's वाली सबएरे की संख्या
temp = temp_2 - iहोगी। - इस सबएरे में सभी 1's हैं जिसका अर्थ है
arr[i]में सभी तत्व <= x हैं। कुल सबएरे होंगेtemp_3 = temp * (temp + 1) / 2। - दोनों ट्रैवर्सल के अंत में, काउंट में
arrके भीतर उन सभी सबएरे की कुल संख्या होगी जिनमें x से कम या बराबर संख्याएँ हैं।
उदाहरण
#include <iostream>
using namespace std;
int sub_X(int arr[], int size, int x) {
int count = 0, temp = 0;
int temp_arr[size];
for (int i = 0; i < size; i++) {
if (arr[i] <= x) {
temp_arr[i] = 1;
} else {
temp_arr[i] = 0;
}
}
for (int i = 0; i < size; i++) {
if (temp_arr[i] == 1) {
int temp_2;
for (temp_2 = i + 1; temp_2 < size; temp_2++) {
if (temp_arr[temp_2] != 1) {
break;
}
}
temp = temp_2 - i;
int temp_3 = (temp) * (temp + 1) / 2;
count = count + temp_3;
i = temp_2;
}
}
return count;
}
int main() {
int arr[] = { 2, 6, 1, 10, 5, 3 };
int x = 4;
int size = sizeof(arr) / sizeof(arr[0]);
cout << "Count of sub-arrays which have elements less than or equal to X are: " << sub_X(arr, size, x);
return 0;
}
आउटपुट
Count of sub-arrays which have elements less than or equal to X are: 3