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

C++ में सबसे लंबा हार्मोनियस सबसीक्वेंस


समस्या विवरण

मान लीजिए हमारे पास एक पूर्णांक सरणी है; हमें इसके सभी संभावित सबसीक्वेंस में से सबसे लंबे हार्मोनियस सबसीक्वेंस की लंबाई ज्ञात करनी है। जैसा कि हम जानते हैं, एक हार्मोनियस अनुक्रम सरणी वह होती है जहां उसका अधिकतम मान और न्यूनतम मान का अंतर ठीक 1 होता है।

उदाहरण

यदि इनपुट है: [1,3,2,2,5,2,3,7], तो आउटपुट होगा 5, क्योंकि सबसे लंबा हार्मोनियस सबसीक्वेंस [2,2,2,3,3] है (अथवा [3,2,2,2,3] आदि)।

हल करने का दृष्टिकोण

इस समस्या को हल करने के लिए निम्नलिखित चरणों का पालन करें:

  • एक मैप m परिभाषित करें
  • प्रत्येक n के लिए nums में:
    • m[n] को 1 से बढ़ाएं
  • प्रत्येक कुंजी-मान जोड़ी (k,v) के लिए m में:
    • it := m में (k+1) की स्थिति
    • यदि 'it' m में मौजूद है, तो:
      • max_ := max_ और it के मान का अधिकतम
  • 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. - C++ में दिए गए अंतर के साथ सबसे लंबा अंकगणितीय सबसीक्वेंस

    मान लीजिए हमारे पास एक इंटीजर ऐरे arr और एक इंटीजर difference है, हमें arr में सबसे लंबे सबसीक्वेंस की लंबाई ढूंढनी है जो एक अंकगणितीय अनुक्रम है जैसे कि सबसीक्वेंस में आसन्न एलिमेंट्स के बीच का अंतर difference के समान है। यदि इनपुट [1,5,7,8,5,3,4,2,1] है और difference -2 है, तो आउटपुट 4 होगा, क्यों

  1. - C++ में Number of Longest Increasing Subsequence

    मान लीजिए हमारे पास पूर्णांकों की एक अक्रमबद्ध सरणी है। हमें सबसे लंबी बढ़ती उपअनुक्रम (longest increasing subsequence) की संख्या ढूंढनी है, इसलिए यदि इनपुट [1, 3, 5, 4, 7] जैसा है, तो आउटपुट 2 होगा, क्योंकि बढ़ते उपअनुक्रम [1,3,5,7] और [1, 3, 4, 7] हैं।इसे हल करने के लिए, हम इन चरणों का पालन करेंगे

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

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