मान लीजिए कि हमारे पास गैर-ऋणात्मक संख्याओं की एक सूची है और एक लक्ष्य पूर्णांक 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