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

कम से कम K योग वाला सबसे छोटा सबअरे C++ में

मान लीजिए हमारे पास एक सरणी A है। हमें A के सबसे छोटे, गैर-खाली, सन्निहित सबअरे की लंबाई ढूंढनी है जिसका योग कम से कम K है। यदि ऐसा कोई सबअरे नहीं है, तो -1 वापस करें।

उदाहरण के लिए, यदि इनपुट [5,3,-2,2,1] है और k = 6, तो आउटपुट 2 होगा, क्योंकि (5+3) >= 6।

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

हम मोनोटोनिक डिक (डबल-एंडेड क्यू) का उपयोग करते हैं जिसमें प्रीफिक्स योग होता है:

  • प्रीफिक्स योग सरणी की गणना करें

  • बढ़ते प्रीफिक्स योग के सूचकांकों का डिक बनाए रखें

  • प्रत्येक i के लिए, फ्रंट से जांचें कि क्या A[i] - A[dq.front()] >= K

  • यदि हां, तो उत्तर अपडेट करें और फ्रंट को पॉप करें

  • फिर बैक से बड़े प्रीफिक्स योग को पॉप करके मोनोटोनिसिटी बनाए रखें

  • वर्तमान सूचकांक को डिक में जोड़ें

उदाहरण

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

class Solution { 
public: 
    int shortestSubarray(vector<int> &A, int K) { 
        int n = A.size(); 
        int ans = n + 1; 
        deque<int> dq; 
        
        for (int i = 0; i < n; i++) { 
            if (i > 0) A[i] += A[i - 1]; 
            if (A[i] >= K) { 
                ans = min(ans, i + 1); 
            } 
            while (!dq.empty() && A[i] - A[dq.front()] >= K) { 
                ans = min(ans, i - dq.front()); 
                dq.pop_front(); 
            } 
            while (!dq.empty() && A[i] <= A[dq.back()]) 
                dq.pop_back(); 
            dq.push_back(i); 
        } 
        return ans == n + 1 ? -1 : ans; 
    } 
}; 

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

इनपुट

{5,3,-2,2,1}, 6

आउटपुट

2
  1. - C++ में न्यूनतम आकार उपसरणी योग

    मान लीजिए हमारे पास n तत्वों की एक सरणी और एक धनात्मक पूर्णांक s है। हमें एक सन्निकट उपसरणी की न्यूनतम लंबाई ढूंढनी है जिसका योग s से बड़ा या बराबर हो। यदि ऐसी कोई उपसरणी नहीं है, तो 0 लौटाएँ। उदाहरण: सरणी [2,3,1,2,4,3], s = 7 → आउटपुट 2 (उपसरणी [4,3] का योग 7)। स्लाइडिंग विंडो (दो पॉइंटर्स) ans

  1. - C++ में Subarray Sum Equals K

    मान लीजिए हमारे पास पूर्णांकों की एक सरणी और एक पूर्णांक k है, हमें उन सतत उपसरणियों (continuous subarrays) की कुल संख्या ढूंढनी है जिनका योग k के समान है। इसलिए यदि nums सरणी [1, 1, 1] है और k 2 है, तो आउटपुट 2 होगा।इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -sums नामक एक मैप परिभाषित करें, tem

  1. - C++ में अधिकतम उपसरणी योग मॉड्यूलो m (Maximum subarray sum modulo m)

    इस समस्या में, हमें आकार n की एक सरणी और एक पूर्णांक m दिया गया है। हमारा कार्य एक प्रोग्राम बनाना है जो C++ में अधिकतम उपसरणी योग मॉड्यूलो m ढूंढे। प्रोग्राम विवरण - यहां, हम उपसरणी के सभी तत्वों के योग को m से विभाजित करके प्राप्त अधिकतम मान ढूंढेंगे। आइए एक उदाहरण से समझते हैं: इनपुट - सरणी = {4