मान लीजिए हमारे पास n तत्वों का एक सरणी है। हमें सरणी से चुनने के लिए तत्वों की अधिकतम संख्या ढूंढनी है, जैसे कि चुने गए किन्हीं दो तत्वों के बीच का निरपेक्ष अंतर 1 से कम या बराबर हो। इसलिए यदि सरणी [2, 2, 3, 4, 5] की तरह है, तो तत्व 3 होगा, इसलिए अधिकतम संख्या वाला अनुक्रम 2, 2, 3 है।
0 और 1 का निरपेक्ष अंतर का अर्थ है कि संख्या x और x + 1 प्रकार की हो सकती है। इसलिए विचार सरणी तत्वों की आवृत्तियों को स्टोर करने का है। इसलिए यदि हम किन्हीं दो लगातार तत्वों का अधिकतम योग ढूंढते हैं, तो यह समाधान होगा।
उदाहरण
#include <iostream> #include <map> using namespace std; int maxElem(int arr[], int n) { map<int,int> occurrence; for(int i=0;i<n;++i){ if(occurrence[arr[i]]) occurrence[arr[i]] += 1; else occurrence[arr[i]] = 1; } int ans = 0, key; map<int,int>:: iterator it=occurrence.begin(); while(it!=occurrence.end()) { key = it->first; ++it; if(occurrence[key+1]!=0) ans=max(ans,occurrence[key]+occurrence[key+1]); } return ans; } int main(){ int arr[] = {2, 2, 3, 4, 5}; int n = sizeof(arr)/sizeof(arr[0]); cout<<"Result is: " << maxElem(arr, n); } आउटपुट
Result is: 3