हमें एक सरणी arr[] दी गई है जिसमें पूर्णांक हैं। लक्ष्य arr[] के उन सभी सबएरे की गिनती करना है जिनमें प्रत्येक सबएरे में लगातार तत्व केवल 1 से भिन्न हों। यदि सरणी [1,2,3] है। सबएरे होंगे केवल [1,2], [2,3], [1,2,3]।
उदाहरण सहित समझ
इनपुट - arr[] = { 4,3,2,1 };
आउटपुट - लगातार तत्वों में 1 का अंतर वाले सबएरे की संख्या: 6
व्याख्या - सबएरे होंगे:
[4,3], [3,2], [2,1], [4,3,2], [3,2,1], [4,3,2,1]. कुल 6।
इनपुट - arr[] = { 1,5,6,7,9,11 };
आउटपुट - लगातार तत्वों में 1 का अंतर वाले सबएरे की संख्या: 3
व्याख्या - सबएरे होंगे:
[5,6], [6,7], [5,6,7]. कुल 3
प्रोग्राम में उपयोग किया गया दृष्टिकोण
हम फॉर लूप का उपयोग करके सरणी को ट्रैवर्स करेंगे। i=0 से i<size तक। फिर जांचें कि क्या कोई तत्व अपने आसन्न तत्व से 1 से भिन्न है। यदि हां तो इंडेक्स को first के रूप में संग्रहीत करें। यदि नहीं तो सबएरे में तत्वों की संख्या को temp के रूप में लें (first-last +1)। इंडेक्स first और last के बीच की सरणियों में सभी लगातार तत्व 1 से भिन्न होते हैं। तो कुल सबएरे होंगे temp*(temp-1)/2। इसे काउंट में जोड़ें। अगली सरणी के लिए इंडेक्स first=last=i अपडेट करें जिसमें सभी लगातार तत्व हों।
- संख्याओं की एक सरणी
arr[]लें। - फंक्शन
sub_ele_diff_one(int arr[], int size)सरणी लेता है और लगातार तत्वों में 1 का अंतर वाले सबएरे की गिनती लौटाता है। - प्रारंभिक काउंट 0 लें।
- फॉर लूप का उपयोग करके i=0 से i<size तक सरणी को ट्रैवर्स करें।
- दो चर
first,lastको 0 लें उन इंडेक्स के लिए जिन तक सभी तत्व लगातार हैं और 1 से भिन्न हैं। - जांचें यदि
arr[i-1]-arr[i] == 1याarr[i]-arr[i-1] == 1। (तत्व 1 से भिन्न हैं)। यदि सही, तोfirstबढ़ाएँ। - यदि पिछली शर्त गलत है, तो इस शर्त को पूरा करने वाली सरणी में कुल तत्व
temp = first - last + 1हैं। संभावित सबएरेtotal = temp * (temp - 1) / 2हैं। - अब इस सबएरे काउंट
totalकोcountमें जोड़ें। - इंडेक्स
firstऔरlastको वर्तमान i (इंडेक्स जहां लगातार तत्व की शर्त विफल होती है) से अपडेट करें। - फॉर लूप के अंत में यदि
first != last। इसका मतलब है कि शेष सरणी शर्त को पूरा करती है। समान चरण लागू करें औरtotalकोcountमें जोड़ें। - दोनों लूप के अंत में, परिणाम के रूप में
countलौटाएँ।
उदाहरण
#include <iostream>
using namespace std;
int sub_ele_diff_one(int arr[], int size) {
int count = 0, first = 0, last = 0;
for (int i = 1; i < size; i++) {
if (arr[i] - arr[i - 1] == 1 || arr[i-1] - arr[i] == 1) {
first++;
} else {
int temp = first - last + 1;
int total = temp * (temp - 1) / 2;
count = count + total;
first = i;
last = i;
}
}
if (first != last) {
int temp = first - last + 1;
int total = temp * (temp - 1) / 2;
count = count + total;
}
return count;
}
int main() {
int arr[] = { 1, 2, 4, 3 };
int size = sizeof(arr) / sizeof(arr[0]);
cout << "Count of Subarrays with Consecutive elements differing by 1 are: " << sub_ele_diff_one(arr, size);
return 0;
}
आउटपुट
Count of Subarrays with Consecutive elements differing by 1 are: 2