संख्याओं की एक सरणी और एक स्टैक को देखते हुए। सरणी के सभी तत्व स्टैक के अंदर मौजूद हैं लक्ष्य अलग-अलग सरणी तत्वों को प्राप्त करने के लिए आवश्यक पॉप संचालन की संख्या का पता लगाना है।
स्टैक को घटते क्रम में भरा जाता है, पहला तत्व उच्चतम होता है और शीर्ष तत्व निम्नतम होता है।
उदाहरण के लिए
इनपुट
Stack [ 7,6,2,1 ] array : 2,1,6,7
आउटपुट
Count of number of pop operations on stack to get each element of the array are: 3 1 0 0
स्पष्टीकरण
Traversing array from 0th index, To get 2 we will pop stack three times. So arr[0] is 3. First two pops will give 7 and 6 also. To get 1 we will pop stack once now. So arr[1] is 1. For 6 and 7 as these are already popped, so arr[2]=arr[3]=0.
इनपुट
Stack [ 3,2,1,1 ] array : 1,2,1,3
आउटपुट
Count of number of pop operations on stack to get each element of the array are: 3 0 1 0
स्पष्टीकरण
Traversing array from 0th index, To get 1 we will pop stack three times. So arr[0] is 3. First two pops will give 3 and 2 also.Traversing array from 0th index, To get 1 we will pop stack three times. So arr[0] is 3. First two pops will give 3 and 2 also.
नीचे दिए गए कार्यक्रम में उपयोग किया गया दृष्टिकोण इस प्रकार है -
इस दृष्टिकोण में हम एक unordered_map
-
एक पूर्णांक सरणी arr[] लें।
-
इसमें तत्वों को संग्रहीत करने के लिए एक स्टैक
स्टैक लें। -
इसमें तत्वों को घटते क्रम में पुश करें।
-
फ़ंक्शन pop_operations(stack
&stck, int arr[], int element) सरणी के प्रत्येक तत्व को प्राप्त करने के लिए स्टैक पर पॉप ऑपरेशंस की संख्या की गिनती देता है। -
प्रारंभिक गणना 0 के रूप में लें।
-
स्टैक पर पॉप संचालन करते समय सामने आए अद्वितीय नंबरों को संग्रहीत करने के लिए unordered_map
um लें। -
लूप के लिए उपयोग कर ट्रैवर्स सरणी।
-
temp=arr[i] लें।
-
यदि तापमान उम में नहीं है। इसे प्राप्त करने के लिए आवश्यक 0 पॉप ऑपरेशन प्रिंट करें।
-
अन्यथा, जबकि अस्थायी नहीं मिला है, स्टैक पर पॉप प्रदर्शन करें और प्रत्येक तत्व को um में सही और वृद्धि गणना के रूप में सेट करें।
-
समय के अंत में, प्रिंट गिनती करें।
-
इस तरह हम सरणी के प्रत्येक तत्व के लिए पॉप ऑपरेशंस की संख्या प्रिंट करेंगे।
उदाहरण
#include <bits/stdc++.h> using namespace std; void pop_operations(stack<int>& stck, int arr[], int elements){ int count = 0; unordered_map<int, bool> um; cout<<"Count of number of pop operations on stack to get each element of the array are: "; for (int i = 0; i < elements; ++i){ int temp = arr[i]; if (um.find(temp) != um.end()) { cout << "0 "; } else{ count = 0; while (stck.top() != temp){ um[stck.top()] = true; stck.pop(); count++; } stck.pop(); count++; cout<<count<<" "; } } } int main(){ int elements = 4; int arr[] = { 2, 1, 6, 7}; stack<int> stck; stck.push(1); stck.push(2); stck.push(6); stck.push(7); pop_operations(stck, arr, elements); return 0; }
आउटपुट
यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -
Count of number of pop operations on stack to get each element of the array are: 3 1 0 0