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

C++ में अधिकतम आकार सबएरे योग बराबर K - प्रीफिक्स योग + हैश मैप


समस्या विवरण

मान लीजिए हमारे पास nums नामक एक सरणी है और एक लक्ष्य मान k है, हमें उस सबएरे की अधिकतम लंबाई ढूंढनी है जिसका योग k के बराबर है। यदि कोई मौजूद नहीं है, तो 0 लौटाएं।

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

समाधान दृष्टिकोण

प्रीफिक्स योग + हैश मैप का उपयोग करके O(n) समय में:

  1. ret := 0
  2. एक मैप m परिभाषित करें - प्रीफिक्स योग को सूचकांक पर मैप करने के लिए
  3. n := nums का आकार
  4. temp := 0, m[0] := -1
  5. i को 0 से n-1 तक लूप करें:
    • temp := temp + nums[i]
    • यदि (temp - k) m में है, तो ret = max(ret, i - m[temp - k]) अपडेट करें
    • यदि temp m में नहीं है, तो m[temp] := i
  6. ret लौटाएं

C++ कार्यान्वयन

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

class Solution { 
public: 
    int maxSubArrayLen(vector<int>& nums, int k) { 
        int ret = 0; 
        unordered_map <int, int> m; 
        int n = nums.size(); 
        int temp = 0; 
        m[0] = -1; 
        for(int i = 0; i < n; i++){ 
            temp += nums[i]; 
            if(m.count(temp - k)){ 
                ret = max(ret, i - m[temp - k]); 
            } 
            if(!m.count(temp)){ 
                m[temp] = i; 
            } 
        } 
        return ret; 
    } 
}; 

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

इनपुट

[1,-1,5,-2,3], 3

आउटपुट

4
  1. - C++ में कम से कम X और अधिकतम Y आकार के सबएरे का अधिकतम औसत

    समस्या कथन एक ऐरे arr[] और दो पूर्णांक X और Y दिए गए हैं। कार्य कम से कम X और अधिकतम Y आकार के सब-एरे को ढूंढना है जिसका औसत अधिकतम हो। उदाहरण यदि इनपुट ऐरे है {2, 10, 15, 7, 8, 4} और x = 3 और Y = 3 तो हम अधिकतम औसत 12.5 निम्नानुसार प्राप्त कर सकते हैं: (10 + 15) / 2 = 12.5 एल्गोरिदम X से Y आकार

  1. - सख्ती से बढ़ते सब-अर्रे का अधिकतम योग खोजें C++ में

    मान लीजिए हमारे पास n पूर्णांकों का एक ऐरे है। सख्ती से बढ़ते सब-अर्रे का अधिकतम योग खोजें। तो यदि ऐरे [1, 2, 3, 2, 5, 1, 7] जैसा है, तो योग 8 होगा। इस ऐरे में तीन सख्ती से बढ़ते सब-अर्रे हैं ये हैं {1, 2, 3}, {2, 5} और {1, 7}। अधिकतम योग वाला सब-अर्रे {1, 7} है। इस समस्या को हल करने के लिए, हमें अध

  1. - C++ में डिवाइड एंड कंकर का उपयोग करके अधिकतम योग सबएरे

    मान लीजिए हमारे पास धनात्मक और ऋणात्मक मानों के साथ डेटा की एक सूची है। हमें सन्निहित सबएरे का योग ढूंढना है जिसका योग सबसे बड़ा है। मान लीजिए सूची में {-2, -5, 6, -2, -3, 1, 5, -6} है, तो अधिकतम सबएरे का योग 7 है। यह {6, -2, -3, 1, 5} का योग है।हम इस समस्या को डिवाइड एंड कंकर विधि का उपयोग करके हल