मान लीजिए कि हमारे पास nums नामक एक सरणी है और एक लक्ष्य मान k है, तो हमें एक उप-सरणी की अधिकतम लंबाई ज्ञात करनी होगी जो k के बराबर हो। अगर कोई मौजूद नहीं है, तो इसके बजाय 0 लौटाएं।
इसलिए, यदि इनपुट संख्या =[1, -1, 5, -2, 3], k =3 जैसा है, तो आउटपुट 4 होगा, जैसा कि सबरे [1, - 1, 5, -2] का योग है 3 और सबसे लंबा है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
रिट:=0
-
एक नक्शा परिभाषित करें मी
-
n :=अंकों का आकार
-
अस्थायी:=0, एम [0]:=-1
-
इनिशियलाइज़ i:=0 के लिए, जब i
-
अस्थायी:=अस्थायी + अंक [i]
-
अगर (अस्थायी - के) मी में है, तो -
-
ret :=अधिकतम रिट और i - m[temp - k]
-
-
यदि तापमान मी में नहीं है, तो -
-
एम [अस्थायी]:=मैं
-
-
-
वापसी रिट
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
#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; } }; main(){ Solution ob; vector<int< v = {1,-1,5,-2,3}; cout << (ob.maxSubArrayLen(v, 3)); }
इनपुट
[1,-1,5,-2,3], 3
आउटपुट
4