কম্পিউটার টিউটোরিয়াল

C++-এ Subarray Product Less Than K

এই সমস্যায় ধনাত্মক পূর্ণসংখ্যার একটি অ্যারে এবং একটি মান 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
  1. N-এর চেয়ে ছোট বা সমান সংখ্যার ডিজিট গুণফলের সর্বোচ্চ মান (C++)

  2. C++-এ Y-র চেয়ে ছোট নম্বর দিয়ে মিনিমাম সেট বের করা

  3. C++ ব্যবহার করে n-র চেয়ে ছোট বা সমান সব ফ্যাক্টোরিয়াল নম্বর বের করা

  4. C++-এ O(1) স্পেসে গুণফল অ্যারে পাজল সমাধান