दिए गए एरे के लिए क्वेरी का उत्तर देने की समस्या पर चर्चा करें। प्रत्येक क्वेरी इंडेक्स के लिए, हमें इंडेक्स के बाईं ओर 1 और 0 की संख्या खोजने की आवश्यकता है, उदाहरण के लिए।
इनपुट: arr[] = {0, 1, 1, 1, 0, 0, 0, 1, 0, 0}, queries[] = {2, 4, 1, 0, 5}
आउटपुट:
क्वेरी 1: zeros = 1, ones = 1
क्वेरी 2: zeros = 1, ones = 3
क्वेरी 3: zeros = 1, ones = 0
क्वेरी 4: zeros = 0, ones = 0
क्वेरी 5: zeros = 2, ones = 3
इनपुट: arr[] = {0, 0, 1, 1, 1, 0, 1, 0, 0, 1}, queries[] = {3, 2, 6}
आउटपुट:
क्वेरी 1: zeros = 2, ones = 1
क्वेरी 2: zeros = 2, ones = 0
क्वेरी 3: zeros = 3, ones = 3
समाधान खोजने का दृष्टिकोण
नाइव दृष्टिकोण
इस समस्या का एक सरल समाधान क्वेरी के इंडेक्स तक एरे के माध्यम से ट्रैवर्स करना और प्रत्येक तत्व की जांच करना है; यदि यह 0 है, तो जीरो काउंटर को 1 से बढ़ाएं अन्यथा, वन्स काउंटर को 1 से बढ़ाएं।
उदाहरण
#include <bits/stdc++.h>
using namespace std;
int main() {
int nums[] = {1, 0, 0, 1, 1, 0, 0, 1, 0, 0};
int queries[] = {2, 4, 1, 0, 5};
int qsize = sizeof(queries) / sizeof(queries[0]);
int zeros = 0, ones = 0;
// प्रत्येक क्वेरी चलाने के लिए लूप।
for(int i = 0; i < qsize; i++) {
// जीरो और वन्स गिनना
for(int j = 0; j < queries[i]; j++) {
if(nums[j] == 0)
zeros++;
else
ones++;
}
cout << "\nक्वेरी " << i+1 << ": zeros = " << zeros << ", ones = " << ones;
zeros = 0;
ones = 0;
}
return 0;
}
आउटपुट
क्वेरी 1: zeros = 1, ones = 1 क्वेरी 2: zeros = 2, ones = 2 क्वेरी 3: zeros = 0, ones = 1 क्वेरी 4: zeros = 0, ones = 0 क्वेरी 5: zeros = 2, ones = 3
कुशल दृष्टिकोण
पिछले दृष्टिकोण में, हर बार, हम नई क्वेरी के लिए 0वें इंडेक्स से 1 और 0 की गणना कर रहे थे।
एक और दृष्टिकोण है पहले हर इंडेक्स के बाईं ओर मौजूद जीरो और वन्स की गणना करना, उन्हें एक एरे में स्टोर करना, और क्वेरी में लिखे इंडेक्स के अनुसार उत्तर लौटाना।
उदाहरण
#include <bits/stdc++.h>
using namespace std;
int main() {
int nums[] = {1, 0, 0, 1, 1, 0, 0, 1, 0, 0};
int queries[] = {2, 4, 1, 0, 5};
int n = sizeof(nums) / sizeof(nums[0]);
int arr[n][2];
int zeros = 0, ones = 0;
// nums एरे के माध्यम से ट्रैवर्स करना।
for (int i = 0; i < n; i++) {
// arr में जीरो और वन्स की संख्या स्टोर करना।
arr[i][0] = zeros;
arr[i][1] = ones;
// शर्त के अनुसार वेरिएबल बढ़ाना
if (nums[i] == 0)
zeros++;
else
ones++;
}
int qsize = sizeof(queries) / sizeof(queries[0]);
for (int i = 0; i < qsize; i++)
cout << "\nक्वेरी " << i+1 << ": zeros = " << arr[queries[i]][0] << ", ones = " << arr[queries[i]][1];
return 0;
}
आउटपुट
क्वेरी 1: zeros = 1, ones = 1 क्वेरी 2: zeros = 2, ones = 2 क्वेरी 3: zeros = 0, ones = 1 क्वेरी 4: zeros = 0, ones = 0 क्वेरी 5: zeros = 2, ones = 3
निष्कर्ष
इस ट्यूटोरियल में, हमने दिए गए एरे में प्रत्येक क्वेरी के लिए इंडेक्स के बाईं ओर 1 और 0 की संख्या लौटाने पर चर्चा की। हमने इस समस्या को हल करने के लिए एक सरल दृष्टिकोण और एक कुशल दृष्टिकोण पर चर्चा की। हमने इस समस्या के लिए C++ प्रोग्राम पर भी चर्चा की जिसे हम C, Java, Python आदि प्रोग्रामिंग भाषाओं के साथ कर सकते हैं। आशा है कि आपको यह ट्यूटोरियल मददगार लगा होगा।