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

C++ में लॉन्गेस्ट अंकगणितीय अनुक्रम (Longest Arithmetic Sequence)


मान लीजिए हमारे पास पूर्णांकों का एक ऐरे A है, हमें A में सबसे लंबे अंकगणितीय उपअनुक्रम (arithmetic subsequence) की लंबाई लौटानी है। जैसा कि आप जानते हैं, 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] है, तो आउटपुट 3 होगा। क्योंकि सबसे लंबा उपअनुक्रम [4,7,10] है।

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

  1. एक मैप dp बनाएं, n := A का आकार, ret := 2 सेट करें

  2. i को 0 से n-1 तक लूप चलाएं

  3. j को 0 से i-1 तक लूप चलाएं

  4. diff := A[j] - A[i] की गणना करें

  5. dp[i][diff] := 1 + dp[j][diff] सेट करें

  6. ret := max(1 + dp[i][diff], ret) अपडेट करें

  7. अंत में ret लौटाएं

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

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

int main(){ 
    vector<int> v1 = {9,4,7,2,10}; 
    Solution ob; 
    cout << (ob.longestArithSeqLength(v1)); 
    return 0; 
}

इनपुट

[9,4,7,2,10]

आउटपुट

3
  1. C++ में बाइनरी ट्री लॉन्गेस्ट कंसिक्यूटिव सीक्वेंस - माता-पिता से बच्चा पथ C++ में बाइनरी ट्री लॉन्गेस्ट कंसिक्यूटिव सीक्वेंस - माता-पिता से बच्चा पथ

    समस्या विवरण मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें सबसे लंबे लगातार अनुक्रम पथ की लंबाई ढूंढनी है। यदि पथ किसी प्रारंभिक नोड से ट्री में किसी भी नोड तक माता-पिता-बच्चा कनेक्शन के साथ नोड्स के किसी भी अनुक्रम को संदर्भित करता है। सबसे लंबा लगातार पथ माता-पिता से बच्चे का पालन करना चाहिए लेकिन

  1. - C++ में static_cast

    static_cast का उपयोग सामान्य/साधारण प्रकार रूपांतरण के लिए किया जाता है। यह निहित प्रकार जबरदस्ती (implicit type coercion) के लिए भी जिम्मेदार कास्ट है और इसे स्पष्ट रूप से भी बुलाया जा सकता है। आपको इसका उपयोग फ्लोट को इंट में, चार को इंट में आदि जैसे मामलों में करना चाहिए। यह संबंधित प्रकार के क्

  1. - C++ प्रोग्राम: दी गई सीक्वेंस का लॉन्गेस्ट इन्क्रीजिंग सबसीक्वेंस ढूंढना

    लॉन्गेस्ट इन्क्रीजिंग सबसीक्वेंस (LIS) एक ऐसा सबसीक्वेंस होता है जहां प्रत्येक एलिमेंट अपने पिछले एलिमेंट से बड़ा होता है। यहां हम पूर्णांकों के एक सेट से लॉन्गेस्ट इन्क्रीजिंग सबसीक्वेंस की लंबाई ढूंढने का प्रयास करेंगे। इनपुट: पूर्णांकों का सेट {0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 1