ধরুন আমাদের একটি পূর্ণসংখ্যা অ্যারে আছে; আমাদেরকে এর সব সম্ভাব্য পরবর্তীগুলির মধ্যে এর দীর্ঘতম সুরেলা অনুসারীর দৈর্ঘ্য খুঁজে বের করতে হবে। যেমনটি আমরা জানি একটি সুরেলা সিকোয়েন্স অ্যারে হল একটি অ্যারে যেখানে এর সর্বোচ্চ মান এবং এর সর্বনিম্ন মানের মধ্যে পার্থক্য ঠিক 1।
সুতরাং, যদি ইনপুটটি [1,3,2,2,5,2,3,7] এর মত হয়, তাহলে আউটপুট হবে 5, কারণ দীর্ঘতম সুরেলা অনুগামী হল [4,3,3,3,4]।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি মানচিত্র m
সংজ্ঞায়িত করুন -
সংখ্যায় n এর জন্য −
-
(1 দ্বারা m[n] বাড়ান)
-
-
m −
-এ কী-মানের জোড়া (k,v) এর জন্য-
এটা :=m
এ (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