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

C++ में सरणी नेस्टिंग


मान लीजिए हमारे पास लंबाई N की एक शून्य-अनुक्रमित सरणी A है जिसमें 0 से N-1 तक के सभी पूर्णांक हैं। हमें सेट S की सबसे लंबी लंबाई ढूंढनी और लौटानी है, जहां S[i] = {A[i], A[A[i]], A[A[A[i]]], ...} नीचे दिए गए नियम के अधीन है। अब S में पहला तत्व इंडेक्स i के तत्व A[i] के चयन से शुरू होता है, S में अगला तत्व A[A[i]] होना चाहिए, फिर A[A[A[i]]]... इस सादृश्य से, हम S में डुप्लिकेट तत्व आने से ठीक पहले रुक जाते हैं। इसलिए यदि सरणी A = [5,4,0,3,1,6,2] है, तो आउटपुट 4 होगा, जैसे A[0]=5, A[1]=4, A[2]=0, A[3]=3, A[4]=1, A[5]=6, और अंत में A[6]=2।

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

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

  • dfs नामक एक फ़ंक्शन बनाएं। यह node, arr सरणी, v सरणी, और एक सेट visited लेगा। dfs सरणी में निम्नलिखित करें:
    • यदि नोड विज़िट किया गया है, तो लौटें
    • नोड को v में डालें, नोड को विज़िट किया गया के रूप में चिह्नित करें
    • dfs(arr[node], arr, v, visited)
  • मुख्य विधि से, निम्नलिखित करें:
    • ret := 0, n := nums का आकार। visited नामक एक सेट बनाएं
    • i = 0 से n-1 तक:
      • एक सरणी v बनाएं
      • यदि nums[i] विज़िट नहीं किया गया है, तो dfs(nums[i], nums, v, visited)
      • ret := max(ret, v का आकार)
  • ret लौटाएं

उदाहरण

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

class Solution { 
public: 
    void dfs(int node, vector<int>& arr, vector<int>& v, set<int>& visited){ 
        if(visited.count(node)) return; 
        v.push_back(node); 
        visited.insert(node); 
        dfs(arr[node], arr, v, visited); 
    } 
    
    int arrayNesting(vector<int>& nums) { 
        int ret = 0; 
        int n = nums.size(); 
        set<int> visited; 
        for(int i = 0; i < n; i++){ 
            vector<int> v; 
            if(!visited.count(nums[i])) dfs(nums[i], nums, v, visited); 
            ret = max(ret, (int)v.size()); 
        } 
        return ret; 
    } 
}; 

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

इनपुट

[5,4,0,3,1,6,2]

आउटपुट

4

  1. - C++ में प्रोडक्ट ऐरे पजल (अतिरिक्त स्पेस के साथ)

    यहां हम ऐरे से संबंधित एक रोचक समस्या देखेंगे। n तत्वों वाला एक ऐरे है। हमें n तत्वों का एक और ऐरे बनाना है। लेकिन दूसरे ऐरे का i-th स्थान पहले ऐरे के i-th तत्व को छोड़कर सभी तत्वों का गुणनफल रखेगा। और एक प्रतिबंध है कि हम इस समस्या में भाग ऑपरेटर का उपयोग नहीं कर सकते। यदि हम भाग ऑपरेशन का उपयोग क

  1. - C++ में स्ट्रिंग्स की सरणी

    इस खंड में हम देखेंगे कि C++ में स्ट्रिंग्स की सरणी को कैसे परिभाषित किया जाए। जैसा कि हम जानते हैं कि C में कोई स्ट्रिंग्स नहीं थीं। हमें कैरेक्टर सरणी का उपयोग करके स्ट्रिंग्स बनानी पड़ती थीं। इसलिए कुछ स्ट्रिंग्स की सरणी बनाने के लिए, हमें कैरेक्टर्स की 2-आयामी सरणी बनानी पड़ती थी। प्रत्येक पंक्

  1. - C++ में सॉर्टिंग

    इस सेक्शन में हम देखेंगे कि C++ में सॉर्टिंग एल्गोरिदम कैसे निष्पादित करें। एक सॉर्टेड ऐरे एक ऐरे है जिसमें प्रत्येक एलिमेंट किसी क्रम में सॉर्टेड होते हैं जैसे न्यूमेरिकल, अल्फाबेटिकल आदि। एक न्यूमेरिकल ऐरे को सॉर्ट करने के लिए कई एल्गोरिदम हैं जैसे बबल सॉर्ट, इन्सर्शन सॉर्ट, सिलेक्शन सॉर्ट, मर्ज स