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

সি++-এ লংগেস্ট আরিথমেটিক সিকোয়েন্স (Longest Arithmetic Sequence)


মান লেযিয়ে একটি পূর্ণসংখ্যা অ্যারে A দেওয়া আছে, আমাদের A-র মধ্যে সবচেয়ে লম্বা আরিথমেটিক সাবসিকোয়েন্সের দৈর্ঘ্য রিটার্ন করতে হবে। আপনি জানেন যে A-এর একটি সাবসিকোয়েন্স হল A[i_1], A[i_2], ..., A[i_k] যেখানে 0 ≤ i_1 < i_2 < ... < i_k ≤ A.length-1, এবং একটি সিকোয়েন্স B আরিথমেটিক হয় যখন B[i+1] - B[i] সব সময় একই মান থাকে (0 ≤ i < B.length-1)। ইনপুট [9,4,7,2,10] হলে আউটপুট হবে ৩। কারণ সবচেয়ে লম্বা সাবসিকোয়েন্স হল [4,7,10]।

এটি সমাধান করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করব -

  • একটি dp ম্যাপ তৈরি করুন, n := A.size(), ret := 2 সেট করুন

  • i = 0 থেকে n-1 পর্যন্ত লুপ চালান

    • j = 0 থেকে i-1 পর্যন্ত লুপ চালান

      • diff := A[j] - A[i]

      • dp[i][diff] := 1 + dp[j][diff]

      • ret := max(1 + dp[i][diff], ret)

  • return ret

নিচের বাস্তবায়নটি দেখে আরও ভালো বুঝতে পারবেন -

উদাহরণ

#include <bits/stdc++.h> using namespace std; class Solution {    public:    int longestArithSeqLength(vector<int>& A) {       unordered_map <int, unordered_map <int, int> > dp;       int n = A.size();       int ret = 2;       for(int i = 0; i < n; i++){          for(int j = 0; j < i; j++){             int diff = A[j] - A[i];             dp[i][diff] = 1 + dp[j][diff];             ret = max(1 + dp[i][diff], ret);          }       }       return ret;    } }; main(){    vector<int> v1 = {9,4,7,2,10};    Solution ob;    cout << (ob.longestArithSeqLength(v1)); }

ইনপুট

[9,4,7,2,10]

আউটপুট

3

  1. C++-এ Binary Tree Longest Consecutive Sequence: বাইনারি ট্রিতে সর্বোচ্চ সতত ক্রম খুঁজে বের করা

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

  3. C++-এ static_cast

  4. C++ প্রোগ্রাম: দিয়ে गये সিকোয়েন্স থেকে লংগেস্ট ইনক্রিজিং সাবসিকোয়েন্স খুঁজে বের করা