ProductOfNumbers ক্লাস ইমপ্লিমেন্ট করতে হবে যা দুটি মেথড সাপোর্ট করে −
add(int num): বর্তমান সংখ্যা লিস্টের শেষে num যোগ করুন।
getProduct(int k): বর্তমান লিস্টের শেষ k সংখ্যার গুণফল রিটার্ন করুন।
আমরা ধরে নিতে পারি বর্তমান লিস্টে সবসময় কমপক্ষে k সংখ্যা থাকে। ইনপুট: add(3), add(0), add(2), add(5), add(4), getProduct(2), getProduct(3), getProduct(4), add(8), getProduct(2) — আউটপুট (প্রতিটি ফাংশন কলের পরে):
[3], [3, 0], [3, 0, 2], [3, 0, 2, 5], [3, 0, 2, 5, 4], then (5 * 4) = 20, then (2 * 5 * 4) = 40, then (0 * 2 * 5 * 4) = 0, then [3, 0, 2, 5, 4, 8], then (4 * 8) = 32.
সমাধানের ধাপগুলো:
ইনিশিয়ালাইজেশনে একটি অ্যারে তৈরি করুন এবং ১ ইনসার্ট করুন
add() মেথড num নেবে
যদি num 0 হয়, তবে অ্যারে ক্লিয়ার করে ১ ইনসার্ট করুন, অন্যথায় লাস্ট_এলিমেন্ট * num অ্যারেতে পশ করুন
getProduct() মেথড k ইনপুট নেবে
n := অ্যারের সাইজ
যদি k > n - 1 হয়, তবে 0 রিটার্ন করুন, অন্যথায় dp[n - 1] / dp[n – k – 1]
উদাহরণ (C++)
নিচের ইমপ্লিমেন্টেশন দেখুন ভালো বুঝতে −
#include <bits/stdc++.h> using namespace std; class ProductOfNumbers { public: vector <int> dq; ProductOfNumbers() { dq.push_back(1); } void add(int num) { if(num == 0){ dq.clear(); dq.push_back(1); } else{ dq.push_back(dq.back() * num); } } int getProduct(int k) { int n = (int)dq.size(); return k > n - 1? 0 : dq[n - 1] / dq[n - k - 1]; } }; main(){ ProductOfNumbers ob; (ob.add(3)); (ob.add(0)); (ob.add(2)); (ob.add(5)); (ob.add(4)); cout << (ob.getProduct(2)) << endl; cout << (ob.getProduct(3)) << endl; cout << (ob.getProduct(4)) << endl; (ob.add(8)); cout << (ob.getProduct(2)) << endl; }
ইনপুট
add(3) add(0) add(2) add(5) add(4) getProduct(2) getProduct(3) getProduct(4) add(8) getProduct(2)
আউটপুট
20 40 0 32