समस्या विवरण
इस समस्या में, हमें एक संख्या N दी गई है। हमारा कार्य दी गई संख्या का स्लोप (ढलान) ज्ञात करना है।
संख्या का स्लोप संख्या में मैक्सिमा और मिनिमा अंकों की कुल संख्या है।
मैक्सिमा अंक वह अंक है जिसके दोनों पड़ोसी (पिछला और अगला) उससे छोटे हैं।
मिनिमा अंक वह अंक है जिसके दोनों पड़ोसी (पिछला और अगला) उससे बड़े हैं।
उदाहरण
इनपुट
N = 9594459
आउटपुट
2
व्याख्या: अंक 5 (पहला) एक मैक्सिमा है (9 > 5 < 9), और अंक 4 (दूसरा) एक मिनिमा है (5 > 4 < 5)।
हल का दृष्टिकोण
समस्या का एक सरल समाधान संख्या को अंक दर अंक पार करना है, पहले और अंतिम अंक को छोड़कर (क्योंकि वे मैक्सिमा या मिनिमा नहीं बनाते)। अब, प्रत्येक अंक के लिए, हम जांचेंगे कि क्या अंक उसके पहले और बाद के अंकों से बड़ा या छोटा है। अंत में, हम मैक्सिमा और मिनिमा की गिनती वापस करेंगे।
एल्गोरिदम
- संख्या को स्ट्रिंग के रूप में लें
- इंडेक्स 1 से len-2 तक लूप करें
- प्रत्येक अंक के लिए जांचें:
- यदि digit[i] > digit[i-1] और digit[i] > digit[i+1] → मैक्सिमा
- यदि digit[i] < digit[i-1] और digit[i] < digit[i+1] → मिनिमा
- गिनती बढ़ाएं
- कुल गिनती वापस करें
C++ कार्यान्वयन
#include <iostream>
#include <string>
using namespace std;
int findNumberSlope(string N, int len) {
int slope = 0;
for (int i = 1; i < len - 1; i++) {
if (N[i] > N[i - 1] && N[i] > N[i + 1])
slope++;
else if (N[i] < N[i - 1] && N[i] < N[i + 1])
slope++;
}
return slope;
}
int main() {
string N = "574473434329";
int len = N.size();
cout << "दी गई संख्या का स्लोप है " << findNumberSlope(N, len);
return 0;
}
आउटपुट
दी गई संख्या का स्लोप है 7
जटिलता विश्लेषण
- समय जटिलता: O(n) जहां n अंकों की संख्या है
- स्पेस जटिलता: O(1) अतिरिक्त स्पेस
महत्वपूर्ण बिंदु
- पहला और अंतिम अंक कभी भी मैक्सिमा/मिनिमा नहीं हो सकते क्योंकि उनके केवल एक पड़ोसी होते हैं
- लगातार समान अंक न तो मैक्सिमा होते हैं और न ही मिनिमा
- समाधान संख्या को स्ट्रिंग के रूप में मानकर बड़ी संख्याओं के लिए भी काम करता है