Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में सबसे लंबे फाइबोनैचि उपअनुक्रम की लंबाई (Length of Longest Fibonacci Subsequence)


एक अनुक्रम X₁, X₂, ..., Xₙ फाइबोनैचि-जैसा (fibonacci-like) होता है यदि:

  • n ≥ 3

  • सभी i+2 ≤ n के लिए Xᵢ + Xᵢ₊₁ = Xᵢ₊₂

अब मान लीजिए सख्ती से बढ़ते धनात्मक पूर्णांकों का एक ऐरे A एक अनुक्रम बनाता है, हमें A के सबसे लंबे फाइबोनैचि-जैसे उपअनुक्रम की लंबाई खोजनी है। यदि कोई मौजूद नहीं है, तो 0 लौटाएं।

उदाहरण के लिए, यदि संख्या [1,2,3,4,5,6,7,8] जैसी है, तो आउटपुट 5 होगा। सबसे लंबा उपअनुक्रम जो फाइबोनैचि है वह [1,2,3,5,8] जैसा है।

समाधान दृष्टिकोण

  1. ret := 0, मैप m, n := A का आकार

  2. dp मैट्रिक्स n×n बनाएं

  3. i को 0 से n-1: m[A[i]] = i

  4. j को i-1 से 0 तक: req = A[i] - A[j]

  5. यदि req < A[j] और m में req है: dp[i][j] = max(dp[i][j], dp[j][m[req]]+1)

  6. अन्यथा dp[i][j] = max(dp[i][j], 2)

  7. ret अपडेट करें, अंत में ret ≥ 3 ? ret : 0 लौटाएं

C++ कार्यान्वयन

#include <bits/stdc++.h> 
using namespace std; 

class Solution { 
public: 
    int lenLongestFibSubseq(vector<int>& A) { 
        int ret = 0; 
        unordered_map<int, int> m; 
        int n = A.size(); 
        vector<vector<int>> dp(n, vector<int>(n)); 
        for(int i = 0; i < n; i++){ 
            m[A[i]] = i; 
            for(int j = i - 1; j >= 0; j--){ 
                int req = A[i] - A[j]; 
                if(A[i] - A[j] < A[j] && m.count(A[i] - A[j])){ 
                    dp[i][j] = max(dp[i][j], dp[j][m[A[i] - A[j]]] + 1); 
                }else{ 
                    dp[i][j] = max(dp[i][j], 2); 
                } 
                ret = max(ret, dp[i][j]); 
            } 
        } 
        return ret >= 3 ? ret : 0; 
    } 
}; 

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

इनपुट

[1,2,3,4,5,6,7,8]

आउटपुट

5
  1. - C++ में 0 और 1 के सेगमेंट की अधिकतम लंबाई

    समस्या कथन एक स्ट्रिंग दी गई है जिसमें केवल 0 और 1 हैं। कार्य स्ट्रिंग के सेगमेंट की अधिकतम लंबाई ढूंढना है जैसे कि प्रत्येक सेगमेंट में 1 की संख्या 0 से अधिक हो। उदाहरण यदि इनपुट स्ट्रिंग 10111000001011 है तो उत्तर 12 होगा - पहला सेगमेंट लंबाई 7 का है 10111000001011 दूसरा सेगमेंट लंबाई 5 का है 10

  1. - C++ प्रोग्राम: लॉन्गेस्ट कॉमन सबसीक्वेंस (LCS)

    एक सबसीक्वेंस तत्वों के समूह का वही क्रम वाला अनुक्रम है। अनुक्रम stuv के लिए, सबसीक्वेंस हैं stu, tuv, suv, आदि। लंबाई n के एक स्ट्रिंग के लिए, उस स्ट्रिंग से सबसीक्वेंस बनाने के 2^n तरीके हो सकते हैं। उदाहरण स्ट्रिंग्स ABCDGH और AEDFHR के लिए सबसे लंबी सामान्य सबसीक्वेंस की लंबाई 3 है। #include &l

  1. - पायथन में सबसे लंबे फाइबोनैचि सबसीक्वेंस की लंबाई खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक अनुक्रम X_1, X_2, ..., X_n है जो फाइबोनैचि-जैसा है यदि: n >= 3 सभी i + 2 <= n के लिए X_i + X_{i+1} = X_{i+2} अब मान लीजिए एक सख्ती से बढ़ता हुआ ऐरे A एक अनुक्रम बनाता है, हमें A के सबसे लंबे फाइबोनैचि-जैसे सबसीक्वेंस की लंबाई ढूंढनी है। यदि ऐसा कोई अनुक्रम नहीं है, तो