मान लीजिए कि हमारे पास गैर-ऋणात्मक संख्याओं की एक सूची है और एक लक्ष्य पूर्णांक k है, तो हमें यह जांचने के लिए एक फ़ंक्शन लिखना होगा कि क्या सरणी में कम से कम 2 आकार का एक निरंतर उप-सरणी है जो k के गुणक तक है, n* तक का योग है। k जहां n भी एक पूर्णांक है। इसलिए यदि इनपुट [23,2,4,6,7], और k =6 जैसा है, तो परिणाम सही होगा, क्योंकि [2,4] आकार 2 का एक सतत उप-सरणी है और 6 तक का योग है। /पी>
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- मानचित्र बनाएं m, सेट करें m[0] :=-1 और योग :=0, n :=nums array का आकार
- मैं के लिए 0 से n - 1 की सीमा में
- योग :=योग + अंक[i]
- यदि k शून्य नहीं है, तो योग :=योग mod k
- यदि m का योग है, और i - m[sum]>=2, तो सही लौटें
- यदि m का योग नहीं है, तो m[sum] सेट करें:=i
- झूठी वापसी
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
bool checkSubarraySum(vector<int>& nums, int k) {
unordered_map<int, int> m;
m[0] = -1;
int sum = 0;
int n = nums.size();
for(int i = 0; i < n; i++){
sum += nums[i];
if(k)
sum %= k;
if(m.count(sum) && i - m[sum] >= 2){
return true;
}
if(!m.count(sum)) m[sum] = i;
}
return false;
}
};
main(){
vector<int> v = {23,2,4,6,7};
Solution ob;
cout << (ob.checkSubarraySum(v, 6));
} इनपुट
[23,2,4,6,7] 6
आउटपुट
1