কম্পিউটার টিউটোরিয়াল

C++-এ লংগেস্ট হারমোনিয়াস সাবসিকোয়েন্স (Longest Harmonious Subsequence)


একটি পূর্ণসংখ্যা অ্যারে দেওয়া থাকলে, তার সবচেয়ে দীর্ঘ হারমোনিয়াস সাবসিকোয়েন্সের দৈর্ঘ্য বের করতে হবে। একটি হারমোনিয়াস সিকোয়েন্স হলো এমন একটি অ্যারে যেখানে সর্বোচ্চ এবং সর্বনিম্ন মানের পার্থক্য ঠিক ১।

উদাহরণ: ইনপুট [1,3,2,2,5,2,3,7] হলে আউটপুট হবে ৫, কারণ সবচেয়ে দীর্ঘ হারমোনিয়াস সাবসিকোয়েন্স হলো [3,2,2,2,3] (এখানে ৩ এবং ২-এর পার্থক্য ১)।

সমাধানের ধাপসমূহ

  • একটি ম্যাপ (hash map) m সংজ্ঞায়িত করুন।
  • অ্যারے nums-এর প্রতিটি উপাদান n এর জন্য m[n]-এর মান ১ বাড়ান।
  • ম্যাপের প্রতিটি কী-মান জোড়া (k, v) এর জন্য:
    • k+1 কীটি ম্যাপে আছে কিনা খুঁজুন (it := m.find(k+1))।
    • যদি পাওয়া যায়, তবে max_ = max(max_, v + it->second) আপডেট করুন।
  • max_ রিটার্ন করুন।

C++ কোড উদাহরণ

#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_;
    }
};

int main() {
    Solution ob;
    vector<int> v = {2,4,3,3,6,3,4,8};
    cout << ob.findLHS(v);
    return 0;
}

ইনপুট

{2,4,3,3,6,3,4,8}

আউটপুট

5
  1. সি++-এ লেংথ অফ লংগেস্ট ফিবোনাচি সাবসিকোয়েন্স (Length of Longest Fibonacci Subsequence)

  2. C++-এ দেয়া ডিফারেন্স সহ লংগেস্ট এরিথমেটিক সাবসিকোয়েন্স

  3. C++-এ Number of Longest Increasing Subsequence

  4. C++ প্রোগ্রাম: লংগেস্ট কমন সাবসিকোয়েন্স (LCS)