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