मान लीजिए कि हमारे पास संख्याओं की एक सूची है जिसे अंक कहा जाता है और यह रॉकेट के आकार और दिशा का प्रतिनिधित्व कर रहा है। धनात्मक पूर्णांक दाईं ओर इंगित करता है, और ऋणात्मक संख्या बाईं ओर दर्शाती है। और संख्या का निरपेक्ष मान रॉकेट के आकार का प्रतिनिधित्व करता है। अब जब दो रॉकेट आपस में टकराते हैं, तो छोटा रॉकेट नष्ट हो जाएगा और बड़ा रॉकेट अपनी यात्रा पर अपरिवर्तित रहेगा। जब वे एक ही आकार के रॉकेट होते हैं और वे टकराते हैं, तो वे दोनों नष्ट हो जाएंगे। जब दो रॉकेट एक ही दिशा में आगे बढ़ रहे हों, तो वे कभी नहीं टकराएंगे (रॉकेट की गति समान मानते हुए)। हमें सभी टकरावों के बाद रॉकेट की स्थिति का पता लगाना है।
इसलिए, यदि इनपुट nums =[3, 8, 5, -5] जैसा है, तो आउटपुट [3, 8] होगा, क्योंकि 5 और -5 नष्ट हो जाएंगे, शेष बचे रहेंगे।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- ls :=एक तत्व संख्या के साथ एक नई सूची[0]
- i के लिए 1 से लेकर अंकों के आकार -1 तक के लिए
- यदि अंक[i]>=0, तो
- एलएस के अंत में अंक [i] डालें
- अन्यथा,
- ls के अंत में
- अंक डालें[i]
- j :=ls - 2 का आकार
- जबकि j>=0 और ls[j]>=0, do
- अगर |ls का अंतिम तत्व|> एलएस [जे], फिर
- ls से jth एलिमेंट हटाएं
- अन्यथा जब |ls का अंतिम तत्व| ls[j] के समान है, तब
- ls से jth एलिमेंट हटाएं
- ls से अंतिम तत्व हटाएं
- लूप से बाहर आएं
- अन्यथा,
- एलएस से अंतिम तत्व हटाएं
- लूप से बाहर आएं
- j :=j-1
- अगर |ls का अंतिम तत्व|> एलएस [जे], फिर
- यदि अंक[i]>=0, तो
- रिटर्न एलएस
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution: def solve(self, nums): ls = [nums[0]] for i in range(1, len(nums)): if nums[i] >= 0: ls.append(nums[i]) else: ls.append(nums[i]) j = len(ls) - 2 while j >= 0 and ls[j] >= 0: if abs(ls[-1]) > ls[j]: ls.pop(j) elif abs(ls[-1]) == ls[j]: ls.pop(j) ls.pop(-1) break else: ls.pop(-1) break j -= 1 return ls ob = Solution() nums = [3, 8, 5, -5] print(ob.solve(nums))
इनपुट
[3, 8, 5, -5]
आउटपुट
[3, 8]