রেঞ্জ সমষ্টি
রেঞ্জ সমষ্টি rangeSum(i, j) বলতে একটি অ্যারে-এ i এবং j ইন্ডেক্সের মধ্যবর্তী সব এলিমেন্টের সমষ্টি বোঝায় (i ≤ j), যেটি উভয় সীমাসহ।
সমস্যা
আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা প্রথম আর্গুমেন্ট হিসেবে একটি ইন্টিজার অ্যারে (arr) এবং دوم ও তৃতীয় আর্গুমেন্ট হিসেবে upper এবং lower নেবে। ফাংশনটি সেই রেঞ্জ সমষ্টিগুলোর সংখ্যা রিটার্ন করবে যারা [upper, lower] রেঞ্জের মধ্যে পড়ে (উভয় সীমাসহ)।
উদাহরণস্বরূপ, ইনপুট যদি হয় –
const arr = [1, 4, 3]; const upper = 5; const lower = 2;
তবে আউটপুট হবে –
const output = 3;
উদাহরণ
কোডটি নিচের মতো –
const arr = [1, 4, 3]; const upper = 5; const lower = 2; const countRangeSum = (arr = [], lower, upper) => { const sums = [0]; let res = 0; let last = 0; let firstge = value => { let l = 0, r = sums.length, m; do { m = Math.floor((r + l) / 2); sums[m] < value ? l = m : r = m; } while (r >= l + 2); while (r > 0 && sums[r - 1] >= value ) { r -= 1; } return r; }; arr.forEach(num => { last += num; res += firstge(last - lower + 1) - firstge(last - upper); sums.splice(firstge(last), 0, last); }); return res; }; console.log(countRangeSum(arr, lower, upper));আউটপুট
কনসোলে আউটপুট হবে –
3