মান লিজিয়ে আমরা একটি ডেটা স্ট্রাকচার ডেভেলপ করতে চাই যা ইন্টিজার-এর একটি তালিকা দিয়ে বিল্ড আপ হবে এবং একটি ফাংশন থাকবে যা ইন্ডেক্স i থেকে j-1 পর্যন্ত এলিমেন্টগুলোর সম দ্রুত বের করতে পারবে। দুটি ফাংশন থাকবে:
- কন্সট্রাক্টর যা ইন্টিজার অ্যারে দিয়ে একটি নতুন ইন্সট্যান্স কনস্ট্রাক্ট করবে।
- get_sum(i, j) অ্যারে এলিমেন্টগুলোর সম রিটার্ন করবে শুরুইন্ডেক্স i থেকে শেষ ইন্ডেক্স j-1 পর্যন্ত।
উদাহরণস্বরূপ, ইনপুট যদি array = [5,2,3,6,4,7,8,9,3,2] হয়, তবে একটি অবজেক্ট obj কন্সট্রাক্ট করুন এবং ফাংশনগুলো কল করুন: obj.get_sum(1,5) এবং obj.get_sum(4,8)। আউটপুট হবে ১৫ এবং ২৮। কারণ প্রথম রেঞ্জের এলিমেন্টগুলো [2,3,6,4] যাদের সম ১৫ এবং দ্বিতীয় রেঞ্জের এলিমেন্টগুলো [4,7,8,9] যাদের সম ২৮।
এটি সমাধান করার জন্য নিচের ধাপগুলো অনুসরণ করব:
- কন্সট্রাক্টর ডিফাইন করুন। এটি array নিবে।
- sums := একটি তালিকা, প্রাথমিকভাবে ০ ইনসার্ট করুন।
- array-র প্রতিটি x এর জন্য:
- sums-র শেষে (x + sums-র লাস্ট আইটেম) ইনসার্ট করুন।
- get_sum() ফাংশন ডিফাইন করুন। এটি i, j নিবে।
- sums[j] - sums[i] রিটার্ন করুন।
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালো বুঝতে:
class RangeSum:
def __init__(self, array):
self.sums = [0]
for x in array:
self.sums.append(x + self.sums[-1])
def get_sum(self, i, j):
return self.sums[j] - self.sums[i]
array = [5,2,3,6,4,7,8,9,3,2]
obj = RangeSum(array)
print(obj.get_sum(1,5))
print(obj.get_sum(4,8))ইনপুট
[5,2,3,6,4,7,8,9,3,2] obj.get_sum(1,5) obj.get_sum(4,8)
আউটপুট
15 28