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