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

K विभिन्न पूर्णांकों वाले सबअरे C++ में

मान लीजिए हमारे पास धनात्मक पूर्णांकों की एक सरणी A है। हम A के एक अच्छे सबअरे (सन्निहित) को तब कहते हैं जब उस सबअरे में विभिन्न पूर्णांकों की संख्या ठीक K हो। हमें A के अच्छे सबअरे की संख्या ढूंढनी है।

उदाहरण के लिए, यदि इनपुट [1,2,3,1,4] है और K = 3, तो आउटपुट 4 होगा, क्योंकि सबअरे [1,2,3], [1,2,3,1], [2,3,1], [3,1,4] हैं।

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

हम स्लाइडिंग विंडो तकनीक का उपयोग करते हैं जिसमें एक सहायक फ़ंक्शन atMost(k) होता है:

  • ठीक K विभिन्न = अधिकतम K विभिन्न - अधिकतम (K-1) विभिन्न

  • atMost(k) में, दो पॉइंटर्स और एक फ्रीक्वेंसी मैप बनाए रखें

  • दाएं पॉइंटर का विस्तार करें, विभिन्न गिनती को अपडेट करें

  • जब विभिन्न > k हो, तो बाएं पॉइंटर को सिकोड़ें

  • प्रत्येक दाएं स्थिति के लिए, (right - left + 1) वैध सबअरे जोड़ें

उदाहरण

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

class Solution { 
public: 
    int subarraysWithKDistinct(vector<int>& a, int k) { 
        return atMost(a, k) - atMost(a, k - 1); 
    } 
    
    int atMost(vector<int>& a, int k){ 
        set<int> current; 
        int j = 0; 
        int ans = 0; 
        int n = a.size(); 
        unordered_map<int, int> m; 
        
        for(int i = 0; i < a.size(); i++){ 
            if(!m[a[i]]++) k--; 
            while(k < 0){ 
                if(!--m[a[j]]) k++; 
                j++; 
            } 
            int x = ((i - j) + 1); 
            ans += x; 
        } 
        return ans; 
    } 
}; 

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

इनपुट

{1,2,3,1,4}, 3

आउटपुट

4
  1. - C++ में k को अधिकतम तत्व मानने वाले गैर-अतिव्यापी उपसरणियों की लंबाई का अधिकतम योग (Maximum sum of lengths of non-overlapping subarrays with k as the max element)

    इस समस्या में, हमें एक सरणी और एक पूर्णांक k दिया गया है। हमारा कार्य एक प्रोग्राम बनाना है जो C++ में k को अधिकतम तत्व मानने वाले गैर-अतिव्यापी उपसरणियों की लंबाई का अधिकतम योग ढूंढे। समस्या विवरण - यहां, हमारे पास एक सरणी और एक पूर्णांक k है। हमें इस सरणी से बनने वाले सभी संभावित गैर-अतिव्यापी उप

  1. - C++ में योग शून्य वाले सभी उपसरणी (Subarrays) प्रिंट करें

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

  1. - C++ में ifstream का उपयोग करके टेक्स्ट फाइल से इंटीजर पढ़ना

    यहां C++ ifstream का उपयोग करके टेक्स्ट फाइल से इंटीजर पढ़ने का एक उदाहरण है। उदाहरण #include <fstream> #include <iostream> using namespace std; int main() { // ऐरे आकार इनिशियलाइज़ करें int arr[30]; ifstream is(a.txt); int cnt = 0; int x; // जांचें कि ऐरे पहले