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

C++ में विषम सम कूद

मान लीजिए हमारे पास एक सरणी A है। कुछ प्रारंभिक इंडेक्स से, हम कूद की एक श्रृंखला बना सकते हैं। श्रृंखला में स्थिति (1, 3, 5, ...) को विषम संख्या वाली कूद कहा जाता है, और स्थिति (2, 4, 6, ...) को सम संख्या वाली कूद कहा जाता है।

अब हम इंडेक्स i से आगे इंडेक्स j (i < j के साथ) पर इस तरह कूद सकते हैं:

  • विषम संख्या वाली कूद के दौरान, हम इंडेक्स j पर कूद सकते हैं जैसे कि A[i] <= A[j] और A[j] सबसे छोटा संभव मान हो। जब ऐसे कई इंडेक्स j हों, तो हम केवल सबसे छोटे ऐसे इंडेक्स j पर कूद सकते हैं।

  • सम संख्या वाली कूद के दौरान, हम इंडेक्स j पर कूद सकते हैं जैसे कि A[i] >= A[j] और A[j] सबसे बड़ा संभव मान हो। जब ऐसे कई इंडेक्स j हों, तो हम केवल सबसे छोटे ऐसे इंडेक्स j पर कूद सकते हैं।

  • यह मामला हो सकता है कि कुछ इंडेक्स i के लिए, कोई कानूनी कूद न हो।

अब एक प्रारंभिक इंडेक्स को अच्छा कहा जाता है जब, उस इंडेक्स से शुरू करके, हम कुछ बार कूदकर सरणी के अंत तक पहुंच सकते हैं।

हमें अच्छे प्रारंभिक इंडेक्स की संख्या ज्ञात करनी है।

यदि इनपुट [10,13,12,14,15] है, तो आउटपुट 2 होगा, क्योंकि दो स्थान इंडेक्स 3 और 4 हैं जहां से हम अंत तक पहुंच सकते हैं।

हल करने के चरण

  • ret := 1, n := A का आकार

  • nextGreaterEqual और nextSmallerEqual सरणी को -1 से भरें

  • एक मैप st परिभाषित करें

  • n-1 से 0 तक पीछे की ओर: lower_bound का उपयोग करके nextGreaterEqual और nextSmallerEqual की गणना करें, st[A[i]] = i

  • आकार n x 2 का 2D सरणी v परिभाषित करें और false से भरें

  • v[n-1][0] = v[n-1][1] = true

  • n-2 से 0 तक: v[i][1] = v[nextGreaterEqual[i]][0], v[i][0] = v[nextSmallerEqual[i]][1], यदि v[i][1] तो ret++

  • ret लौटाएं

उदाहरण

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

class Solution { 
public: 
    int oddEvenJumps(vector<int>& A) { 
        int ret = 1; 
        int n = A.size(); 
        vector<int> nextGreaterEqual(n, -1); 
        vector<int> nextSmallerEqual(n, -1); 
        map<int, int> st; 
        for (int i = n - 1; i >= 0; i--) { 
            map<int, int>::iterator it = st.lower_bound(A[i]); 
            nextGreaterEqual[i] = (it != st.end()) ? it->second : -1; 
            if (it != st.end() && it->first == A[i]) it++; 
            nextSmallerEqual[i] = it != st.begin() ? prev(it)->second : -1; 
            st[A[i]] = i; 
        } 
        vector<vector<bool> > v(n, vector<bool>(2, false)); 
        v[n - 1][0] = v[n - 1][1] = true; 
        for (int i = n - 2; i >= 0; i--) { 
            if (nextGreaterEqual[i] != -1) v[i][1] = v[nextGreaterEqual[i]][0]; 
            if (nextSmallerEqual[i] != -1) v[i][0] = v[nextSmallerEqual[i]][1]; 
            if (v[i][1]) ret++; 
        } 
        return ret; 
    } 
}; 

int main() { 
    Solution ob; 
    vector<int> v = {10,13,12,14,15}; 
    cout << (ob.oddEvenJumps(v)); 
    return 0; 
}

इनपुट

{10,13,12,14,15}

आउटपुट

2
  1. C++ में जंप गेम IV C++ में जंप गेम IV

    मान लीजिए हमारे पास arr नामक पूर्णांकों की एक सरणी है। हम प्रारंभ में इंडेक्स 0 पर हैं। एक चरण में हम इंडेक्स i से i + x पर कूद सकते हैं जहां: i + x = 0, j जहां: arr[i] और arr[j] समान हैं और i और j समान नहीं हैं। यहां n सरणी का आकार है। हमें सरणी के अंतिम इंडेक्स तक पहुंचने के लिए न्यूनतम चरणों की स

  1. C++ में विषम और सम संख्या में नोड्स वाले सभी स्तर प्रिंट करें C++ में विषम और सम संख्या में नोड्स वाले सभी स्तर प्रिंट करें

    इस समस्या में, हमें एक ट्री दिया गया है। और हमें उन सभी स्तरों को प्रिंट करना है जिनमें सम संख्या में नोड्स और विषम संख्या में नोड्स हैं। अवधारणा को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं आउटपुट - विषम संख्या में नोड्स वाले स्तर: 1, 3, 4 सम संख्या में नोड्स वाले स्तर: 2 व्याख्या - पहले स्तर म

  1. - C++ में static_cast

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