मान लीजिए कि हमारे पास एक पूर्णांक सरणी है; हमें इसके सभी संभावित अनुक्रमों के बीच इसके सबसे लंबे सामंजस्यपूर्ण बाद की लंबाई का पता लगाना होगा। जैसा कि हम जानते हैं कि एक सामंजस्यपूर्ण अनुक्रम सरणी एक सरणी है जहां इसके अधिकतम मूल्य और इसके न्यूनतम मान के बीच का अंतर बिल्कुल 1 है।
इसलिए, यदि इनपुट [1,3,2,2,5,2,3,7] जैसा है, तो आउटपुट 5 होगा, क्योंकि सबसे लंबा सामंजस्यपूर्ण अनुक्रम [4,3,3,3,4] है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक नक्शा परिभाषित करें मी
-
n अंकों के लिए -
-
(m[n] 1 से बढ़ाएं)
-
-
कुंजी-मान युग्म के लिए (k,v) m में -
-
it :=(k+1) की स्थिति m
. में -
अगर 'यह' मी में है, तो -
-
max_:=अधिकतम अधिकतम_ और उसका मान
-
-
-
वापसी अधिकतम_
उदाहरण
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; class Solution { public: int findLHS(vector<int>& nums) { unordered_map<int, int> m; for (const int n : nums) ++m[n]; int max_{ 0 }; for (const auto & [ k, v ] : m) { auto it = m.find(k + 1); if (it != m.end()) max_ = max(max_, v + it->second); } return max_; } }; main(){ Solution ob; vector<int> v = {2,4,3,3,6,3,4,8}; cout << (ob.findLHS(v)); }
इनपुट
{2,4,3,3,6,3,4,8}
आउटपुट
5