मान लीजिए कि हमारे पास 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