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