মান ল করুন nums নামের একটি সংখ্যার তালিকা এবং operations নামের একটি অপারেশন তালিকা। এখানে প্রতিটি অপারেশনের তিনটি ফিল্ড [L, R, X], যা নির্দেশ করে L থেকে R ইনডেক্স পর্যন্ত (ইনক্লুসিভ) সব এলিমেন্ট X দিয়ে বাড়াতে হবে। সব অপারেশন প্রয়োগ করে ফাইনাল তালিকা ফেরত দিতে হবে।
যদি ইনপুট হয় nums = [8, 4, 2, -9, 4] operations = [[0, 0, 3], [1, 3, 2], [2, 3, 5]], তবে আউটপুট হবে [11, 6, 9, -2, 4], কারণ প্রাথমিক তালিকা ছিল [8, 4, 2, -9, 4]。
- প্রথম অপারেশন [0, 0, 3] করলে তালিকা হবে [11, 4, 2, -9, 4]।
- দ্বিতীয় অপারেশন [1, 3, 2] করলে তালিকা হবে [11, 6, 4, -7, 4]।
- তৃতীয় অপারেশন [2, 3, 5] করলে তালিকা হবে [11, 6, 9, -2, 4]।
এটি সমাধান করতে আমরা নিম্নলিখিত ধাপগুলি অনুসরণ করব:
- events := একটি নতুন তালিকা
- প্রতিটি (l, r, inc) operations-এ জন্য:
- (l, inc) events-এ যোগ করুন
- (r + 1, -inc) events-এ যোগ করুন
- events তালিকাটি সাজান
- inc := 0, ptr := 0
- i কে ০ থেকে nums-এর আকার পর্যন্ত লুপ চালান:
- যখন ptr < events-এর আকার এবং events[ptr][0] == i:
- inc := inc + events[ptr][1]
- ptr := ptr + 1
- nums[i] := nums[i] + inc
- যখন ptr < events-এর আকার এবং events[ptr][0] == i:
- nums ফেরত দিন
বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশনটি দেখুন:
উদাহরণ
class Solution: def solve(self, nums, operations): events = [] for l, r, inc in operations: events.append((l, inc)) events.append((r + 1, -inc)) events.sort() inc = 0 ptr = 0 for i in range(len(nums)): while ptr < len(events) and events[ptr][0] == i: inc += events[ptr][1] ptr += 1 nums[i] += inc return nums ob = Solution() nums = [8, 4, 2, -9, 4] operations = [ [0, 0, 3], [1, 3, 2], [2, 3, 5] ] print(ob.solve(nums, operations))
ইনপুট
[1,2,3,4,5,6,7,8,9,10], 3
আউটপুট
[11, 6, 9, -2, 4]