ধরুন আমাদের কাছে অ-ঋণাত্মক সংখ্যার একটি তালিকা এবং একটি টার্গেট পূর্ণসংখ্যা k আছে, আমাদেরকে একটি ফাংশন লিখতে হবে যে অ্যারের আকারের একটি অবিচ্ছিন্ন সাবয়ারে আছে কিনা তা পরীক্ষা করতে হবে কমপক্ষে 2 যা k এর গুণিতক পর্যন্ত যোগফল, n * পর্যন্ত যোগফল। k যেখানে nও একটি পূর্ণসংখ্যা। সুতরাং যদি ইনপুটটি [23,2,4,6,7], এবং k =6 এর মত হয়, তবে ফলাফলটি সত্য হবে, কারণ [2,4] আকার 2 এর একটি অবিচ্ছিন্ন সাবয়ারে এবং 6 পর্যন্ত যোগফল।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- একটি মানচিত্র m তৈরি করুন, m[0] সেট করুন :=-1 এবং যোগফল :=0, n :=সংখ্যা বিন্যাসের আকার
- আমি 0 থেকে n – 1
- পরিসরে
- সমষ্টি :=যোগফল + সংখ্যা[i]
- যদি k অ শূন্য হয়, তাহলে যোগফল :=যোগ মোড k
- যদি m-এর যোগফল থাকে এবং i – m[sum]>=2 থাকে, তাহলে true ফেরত দিন
- যদি 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