हमें एक जावास्क्रिप्ट फ़ंक्शन लिखने की आवश्यकता होती है जो पहले तर्क के रूप में संख्याओं की एक सरणी और दूसरे तर्क के रूप में एक संख्या लेता है। फ़ंक्शन को निरंतर उप-सरणी की कुल संख्या की गणना ढूंढनी चाहिए और वापस करनी चाहिए जिसका योग दूसरे तर्क द्वारा निर्दिष्ट संख्या के बराबर है।
यह गारंटी है कि सरणी में सभी संख्याएँ धनात्मक संख्याएँ हैं।
उदाहरण के लिए -
यदि इनपुट हैं -
const arr = [1, 1, 1]; const sum = 2;
तब आउटपुट 2 होना चाहिए क्योंकि इस सरणी में ठीक दो उप-सरणी हैं जो 2 के बराबर हैं।
हम स्लाइडिंग विंडो एल्गोरिथम का उपयोग करेंगे जो वांछित विंडो (आवश्यक राशि के साथ उप-सरणी) खोजने और उनकी संख्या गिनने के लिए दो-सूचक दृष्टिकोण का उपयोग करता है।
उदाहरण
const arr = [1, 2, 3, 4, 5]; const sum = 5; // two pointer approach to find one matching subarray const findOne = (arr, target, start = 0) => { let left = start, right = start, sum = 0; while(right < arr.length){ sum += arr[right]; if(sum === target){ return true; } else if(sum < target){ right++; }else{ left++; sum -= left; if(left > right){ right = left; }; }; }; return false; }; // iterating over the array to find all pair count const findAll = (arr = [], target) => { let count = 0; for(let i = 0; i < arr.length; i++){ count += findOne(arr, target, i); }; return count; }; console.log(findAll(arr, sum)); console.log(findAll([1, 1, 1], 2));
आउटपुट
और कंसोल में आउटपुट होगा -
2 2