इस समस्या में, हमें एक स्ट्रिंग दी जाती है जो एक बड़ी संख्या को दर्शाती है और एक पूर्णांक k roar ब्रेकप्वाइंट की संख्या को दर्शाता है। हमारा काम एक प्रोग्राम बनाना है जो एल ब्रेकप्वाइंट को एक संख्या में डालने के बाद अधिकतम सेगमेंट मान प्राप्त करेगा।
यहां, हमें वह अधिकतम संख्या ज्ञात करनी है जो स्ट्रिंग द्वारा दी गई संख्या में k ब्रेकपॉइंट लगाने के बाद उत्पन्न हो सकती है।
आइए समस्या को समझने के लिए एक उदाहरण लेते हैं
इनपुट - स्ट्रिंग ="45972", के =3
आउटपुट - 97
स्पष्टीकरण -
All possible number is: 45 9 7 2 4 59 7 2 4 5 97 2 4 5 9 72 From all 97 is the largest number.
इस समस्या को हल करने के लिए, हम स्लाइडिंग विंडो का उपयोग करेंगे। यहां, विंडो का आकार (स्ट्रिंग की लंबाई - k) के बराबर होगा यानी इस आकार की अधिकतम संख्या होगी। हम स्लाइडिंग विंडो तकनीक का उपयोग करके दिए गए आकार की सभी संभावित संख्याओं की अधिकतम संख्या की जांच करेंगे।
उदाहरण
K ब्रेकप्वाइंट को एक संख्या में रखने के बाद अधिकतम खंड मान ज्ञात करने का कार्यक्रम -
#include <bits/stdc++.h> using namespace std; int findMaxSegmentWithKbreaks(string &s, int k) { int window = s.length() - k; int MaxNumber = 0; for (int i=0; i<window; i++) MaxNumber = MaxNumber * 10 + (s[i] - '0'); int slWindow = pow(10, window-1); int value = MaxNumber; for (int i = 1; i <= (s.length() - window); i++) { value = value - (s[i-1]- '0')*slWindow; value = value*10 + (s[i+window-1]- '0'); MaxNumber = max(MaxNumber, value); } return MaxNumber; } int main() { string s = "45972"; int k = 3; cout<<"Maximum segment value after putting "<<k<<" break points in a number = "<<findMaxSegmentWithKbreaks(s, k); return 0; }
आउटपुट
Maximum segment value after putting 3 breakpoints in a number = 97