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

C++ में सतत उपसरणी योग


मान लीजिए हमारे पास गैर-ऋणात्मक संख्याओं की एक सूची और एक लक्ष्य पूर्णांक k है, हमें एक फ़ंक्शन लिखना है जो जांचता है कि क्या सरणी में कम से कम आकार 2 की एक सतत उपसरणी है जो k के गुणक तक जुड़ती है, n*k तक जुड़ती है जहां n भी एक पूर्णांक है। इसलिए यदि इनपुट [23,2,4,6,7] है, और k = 6, तो परिणाम True होगा, क्योंकि [2,4] आकार 2 की एक सतत उपसरणी है और 6 तक जुड़ती है।

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

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

  • एक मैप m बनाएं, m[0] := -1 और sum := 0, n := nums सरणी का आकार सेट करें
  • i = 0 से n-1 तक:
    • sum := sum + nums[i]
    • यदि k शून्येतर है, तो sum := sum mod k
    • यदि m में sum है, और i - m[sum] >= 2, तो true लौटाएं
    • यदि m में sum नहीं है, तो m[sum] := i सेट करें
  • false लौटाएं

उदाहरण

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

class Solution { 
public: 
    bool checkSubarraySum(vector<int>& nums, int k) { 
        unordered_map<int, int> m; 
        m[0] = -1; 
        int sum = 0; 
        int n = nums.size(); 
        for(int i = 0; i < n; i++){ 
            sum += nums[i]; 
            if(k) 
                sum %= k; 
            if(m.count(sum) && i - m[sum] >= 2){ 
                return true; 
            } 
            if(!m.count(sum)) m[sum] = i; 
        } 
        return false; 
    } 
}; 

int main(){ 
    vector<int> v = {23,2,4,6,7}; 
    Solution ob; 
    cout << (ob.checkSubarraySum(v, 6)); 
}

इनपुट

[23,2,4,6,7] 6

आउटपुट

1

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

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

  1. - C++ में प्रीफिक्स सम का उपयोग करके O(n) में अधिकतम सबएरे सम

    समस्या कथनसकारात्मक और नकारात्मक पूर्णांकों का एक सरणी दिया गया है, उस सरणी में अधिकतम सबएरे सम ज्ञात करें।उदाहरणयदि इनपुट सरणी है {-12, -5, 4, -1, -7, 1, 8, -3} तो आउटपुट 9 होगा।एल्गोरिदमइनपुट सरणी का प्रीफिक्स सम निकालें।प्रारंभ करें: min_prefix_sum = 0, res = -infinitei = 0 से n तक लूप बनाए रखें

  1. - C++ में एलिक्वॉट योग (Aliquot Sum)

    यहां हम देखेंगे कि एलिक्वॉट योग क्या है? n का एलिक्वॉट योग n को छोड़कर n के सभी पूर्ण गुणनखंडों का योग है। उदाहरण के लिए, यदि संख्या 20 है, तो पूर्ण गुणनखंड (1, 2, 4, 5, 10) हैं। तो एलिक्वॉट योग 22 है। एक दिलचस्प तथ्य यह है कि, यदि किसी संख्या का एलिक्वॉट योग संख्या स्वयं है, तो वह संख्या एक पूर्ण