এই সমস্যায় ধনাত্মক পূর্ণসংখ্যার একটি অ্যারে এবং একটি মান k দেওয়া থাকলে, olyan কন্টিগুয়াস সাবঅ্যারে কতটি আছে যাদের গুণফল k-এর চেয়ে ছোট, তা বের করতে হবে।
উদাহরণ: nums = [10, 5, 2, 6], k = 100 -> আউটপুট 8। সাবঅ্যারেগুলো: [10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]।
সমাধানের পদ্ধতি (Sliding Window)
prod = 1,left = 0,ans = 0।right০ থেকে n-1 পর্যন্ত লুপ চালান।prod *= nums[right]।- যখন
prod >= kএবংleft <= right, তখনprod /= nums[left]এবংleft++। ans += (right - left + 1)(কারণleftথেকেrightপর্যন্ত সব সাবঅ্যারে বৈধ)।
উদাহরণ (C++)
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int numSubarrayProductLessThanK(vector<int>& nums, int k) {
if (k <= 1) return 0; // k=0 বা 1 হলে কোনো পজিটিভ প্রোডাক্ট সম্ভব নয়
long long prod = 1;
int left = 0, ans = 0;
for (int right = 0; right < nums.size(); right++) {
prod *= nums[right];
while (prod >= k && left <= right) {
prod /= nums[left];
left++;
}
ans += (right - left + 1);
}
return ans;
}
};
int main() {
Solution ob;
vector<int> v = {10, 5, 2, 6};
cout << ob.numSubarrayProductLessThanK(v, 100);
return 0;
}
ইনপুট
[10,5,2,6] 100
আউটপুট
8