मान लीजिए कि हमारे पास पूर्णांकों की एक सरणी और एक पूर्णांक k है, तो हमें निरंतर उप-सरणियों की कुल संख्या ज्ञात करनी होगी जिनका योग k के समान है। तो अगर nums array [1, 1, 1] है और k 2 है, तो आउटपुट 2 होगा।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक मानचित्र को परिभाषित करें जिसे योग कहा जाता है, अस्थायी:=0, योग[0]:=1 और उत्तर:=0
- i के लिए 0 से लेकर सरणी के आकार तक
- अस्थायी:=अस्थायी + n[i]
- यदि योगों में k - अस्थायी है, तो
- उत्तर:=उत्तर + योग [के - अस्थायी]
- राशि का मान बढ़ाएं[-temp] 1
- वापसी उत्तर
उदाहरण(C++)
एक बेहतर समझ प्राप्त करने के लिए आइए निम्नलिखित कार्यान्वयन को देखें -
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int subarraySum(vector<int>& n, int k) {
unordered_map <int, int> sums;
int temp = 0;
sums[0] = 1;
int ans =0;
for(int i =0;i<n.size();i++){
temp+= n[i];
if(sums.find(k-temp)!=sums.end()){
ans += sums[k-temp];
}
sums[-temp]++;
}
return ans;
}
};
main(){
Solution ob;
vector<int> v = {1,1,1};
cout << (ob.subarraySum(v, 2));
} इनपुट
[1,1,1] 2
आउटपुट
2