मान लीजिए कि हमारे पास संख्याओं की एक सूची है जिसे अंक कहा जाता है और संचालन की एक सूची है। यहां प्रत्येक ऑपरेशन में तीन फ़ील्ड हैं [एल, आर, एक्स], यह इंगित करता है कि हमें एक्स से सभी तत्वों को इंडेक्स एल से आर (समावेशी) तक बढ़ाना चाहिए। हमें सभी ऑपरेशन लागू करने होंगे और अंतिम सूची वापस करनी होगी।
इसलिए, यदि इनपुट अंकों की तरह है =[8, 4, 2, 9, 4] संचालन =[[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] होगी।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- घटनाक्रम:=एक नई सूची
- संचालन में प्रत्येक (l, r, inc) के लिए, करें
- इवेंट के अंत में (l, inc) डालें
- इवेंट के अंत में (r + 1, -inc) डालें
- सूची ईवेंट क्रमबद्ध करें
- इंक:=0, पीटीआर:=0
- मैं के लिए 0 से लेकर अंकों के आकार तक, करें
- जबकि ptr <घटनाओं और घटनाओं का आकार[ptr, 0] वही है जो i, do
- . है
- inc :=inc + इवेंट्स[ptr, 1]
- ptr:=ptr + 1
- अंक[i] :=nums[i] + inc
- जबकि ptr <घटनाओं और घटनाओं का आकार[ptr, 0] वही है जो i, do
- रिटर्न अंक
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
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]