हमें एक सरणी दी गई है arr[] जिसमें पूर्णांक हैं। लक्ष्य गिरफ्तारी [] के सभी उप-सरणी को गिनना है, जैसे कि प्रत्येक उप-सरणी में लगातार तत्व केवल 1 से भिन्न होते हैं। अगर सरणी [1,2,3] है। सबअरे [1,2], [2,3], [1,2,3] ही होंगे।
आइए उदाहरणों से समझते हैं।
इनपुट - गिरफ्तारी [] ={ 4,3,2,1 };
आउटपुट − लगातार तत्वों के साथ उपसरणियों की संख्या 1 से भिन्न होती है − 6
स्पष्टीकरण - सुबारे होंगे -
[4,3], [3,2], [2,1], [4,3,2], [3,2,1], [4,3,2,1]. Total 6.
इनपुट - एआर [] ={ 1,5,6,7,9,11 };
आउटपुट - लगातार तत्वों के साथ उपसरणियों की संख्या 1 से भिन्न होती है - 3
स्पष्टीकरण - सुबारे होंगे -
[5,6], [6,7], [5,6,7]. Total 3
नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है
हम लूप के लिए a का उपयोग करके सरणी को पार करेंगे। i=0 से i<आकार तक। फिर जांचें कि क्या कोई तत्व अपने आसन्न तत्व से 1 से भिन्न है। यदि हां पहले के रूप में स्टोर इंडेक्स। यदि नहीं, तो उप-सरणी में तत्वों की संख्या को एक अस्थायी (प्रथम-अंतिम +1) के रूप में लें। पहले और अंतिम अनुक्रमित के बीच के सरणी में सभी लगातार तत्व 1 से भिन्न होते हैं। इसलिए कुल उप-सरणी अस्थायी * (अस्थायी -1)/2 होगी। इसे गिनने के लिए जोड़ें। लगातार सभी तत्वों के साथ अगली सरणी के लिए अनुक्रमणिका पहले =अंतिम =i अपडेट करें।
-
संख्याओं की एक सरणी गिरफ्तारी [] लें।
-
फ़ंक्शन sub_ele_diff_one(int arr[], int size) सरणी लेता है और लगातार तत्वों के साथ उपसरणियों की गिनती देता है जो 1 से भिन्न होते हैं।
-
प्रारंभिक गणना 0 के रूप में लें।
-
हम लूप के लिए i =0 से I <आकार तक का उपयोग करके सरणी को पार करेंगे।
-
पहले दो वैरिएबल लें, इंडेक्स के लिए 0 के रूप में अंतिम, जिसमें सभी तत्व लगातार हैं और 1 से भिन्न हैं।
-
जांचें कि क्या गिरफ्तारी [i-1] -arr [i] ==1 या गिरफ्तारी [i] -arr [i-1] ==1 है। (तत्व 1 से भिन्न होते हैं)। अगर सही है, तो पहले इंक्रीमेंट करें।
-
यदि पिछली स्थिति गलत है, तो इस शर्त को पूरा करने वाले सरणी में कुल तत्व अस्थायी =प्रथम-अंतिम + 1 है। सबएरे संभव है कुल =अस्थायी * (अस्थायी -1) / 2।
-
अब गिनने के लिए इस सबअरे काउंट टोटल को जोड़ें।
-
वर्तमान I के साथ पहले और अंतिम अनुक्रमणिका अपडेट करें (अनुक्रमणिका जिस पर लगातार तत्व स्थिति विफल हो जाती है।
-
लूप के अंत में अगर पहले!=अंतिम। इसका मतलब है कि शेष सरणी शर्त को पूरा करती है। समान चरणों को लागू करें और गिनने के लिए कुल जोड़ें।
-
दोनों लूपों के अंत में, परिणाम के रूप में वापसी की गणना करें।
उदाहरण
#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