मान लीजिए कि हमारे पास सकारात्मक तापमान की एक सरणी है जो तापमान टी का प्रतिनिधित्व करती है। कार्य यह गणना करना है कि दी गई सूची में अगले गर्म तापमान के लिए कितने दिन हैं।
उदाहरण के लिए
इनपुट-1: टी =[ 73, 74, 75, 71, 69, 72, 76, 73]
आउटपुट: [1, 1, 4, 2, 1 ,1 ,0 ,0]
स्पष्टीकरण: तापमान की दी गई सूची में [73, 74, 75, 71, 69, 72, 76, 73], अगला बड़ा तापमान दिन 1 पर है। इसी तरह, दिन 6 सभी तापमानों में सबसे गर्म है, इस प्रकार उत्पादन होगा [ 1, 1, 4, 2, 1, 1, 0, 0]।
इस समस्या को हल करने का तरीका
हमारे पास तापमान की एक सूची है और हमें दिए गए तापमान से अगले गर्म दिन तक दिनों की संख्या की गणना करनी है।
इस समस्या को हल करने के लिए, हम एक स्टैक का उपयोग कर सकते हैं। प्रारंभ में स्टैक खाली है, और हम जांच करेंगे कि स्टैक का शीर्ष खाली है या नहीं, फिर तापमान को धक्का दें। अगला, यदि स्टैक के शीर्ष पर तापमान अगले उपलब्ध तापमान से कम है, तो इसका मतलब है कि यह ठंडा है, और हम इसे स्टैक से पॉप करेंगे।
हम फिर से जांच करेंगे कि स्टैक के शीर्ष का तापमान अधिक है या गर्म है, फिर उसमें से दिनों को घटाकर दिन की गणना करें और परिणाम में इंडेक्स को स्टोर करें।
- तापमान डेटा का इनपुट लें।
- एक पूर्णांक फ़ंक्शन dailyTemperature(int *T) तापमान सरणी को इनपुट के रूप में लेता है और अगले सबसे गर्म तापमान की सूची देता है।
- तापमान सरणी पर पुनरावृति करें।
- सभी तापमानों की सूची वापस करने के लिए एक परिणाम वेक्टर या सरणी बनाएं।
- एक खाली स्टैक बनाएं और यह जांचते हुए तापमान को पुश करें कि क्या top()>T[i], फिर उसे स्टैक में धकेलें और दिनों की गणना करें।
- परिणाम स्टोर करें और उसे वापस कर दें।
उदाहरण
#include<bits/stdc++.h> using namespace std; void dailyTemp(int * T, int n) { stack < int > s; int ans[n]; memset(ans, 0, sizeof(ans)); for (int i = 0; i < n; i++) { while (!s.empty() && T[s.top()] < T[i]) { int j = s.top(); s.pop(); ans[j] = i - j; } s.push(i); } for (int i = 0; i < n; i++) { cout << ans[i] << " " << ; } } int main() { int n = 8; int T[8] = {73, 74, 75, 71, 69, 72, 76, 73}; dailyTemp(T, n); return 0; }
आउटपुट
उपरोक्त कोड को चलाने से आउटपुट इस प्रकार उत्पन्न होगा,
1 1 4 2 1 1 0 0
दिए गए तापमान में अगला गर्म तापमान दिन 4 पर है।