ধরুন আমাদের কাছে সংখ্যার একটি তালিকা রয়েছে যাকে বলা হয় সংখ্যা এবং এটি রকেটের আকার এবং দিক নির্দেশ করছে। ধনাত্মক পূর্ণসংখ্যা ডান নির্দেশ করে, এবং ঋণাত্মক সংখ্যা বাম নির্দেশ করে। এবং সংখ্যার পরম মান রকেটের আকারের প্রতিনিধিত্ব করে। এখন দুটি রকেটের সংঘর্ষ হলে ছোটটি ধ্বংস হয়ে যাবে এবং বড়টি অপরিবর্তিত যাত্রা চালিয়ে যাবে। যখন তারা একই আকারের রকেট হয় এবং তারা সংঘর্ষে লিপ্ত হয়, তারা উভয়ই ধ্বংস করবে। যখন দুটি রকেট একই দিকে অগ্রসর হয়, তারা কখনই সংঘর্ষে লিপ্ত হবে না (ধরে নিচ্ছি রকেটের গতি একই)। সমস্ত সংঘর্ষের পরে আমাদের রকেটগুলির অবস্থা খুঁজে বের করতে হবে৷
সুতরাং, যদি ইনপুটটি সংখ্যার মত হয় =[3, 8, 5, -5], তাহলে আউটপুট হবে [3, 8], যেহেতু 5 এবং -5 ধ্বংস হয়ে যাবে, বাকিগুলো বেঁচে থাকবে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- ls :=একটি উপাদান সংখ্যা সহ একটি নতুন তালিকা[0]
- আমি রেঞ্জ 1 থেকে সংখ্যার আকার - 1 এর জন্য, কর
- যদি সংখ্যা[i]>=0 হয়, তাহলে
- ls-এর শেষে nums[i] ঢোকান
- অন্যথায়,
- ls-এর শেষে nums[i] ঢোকান
- j :=ls - 2 এর আকার
- যখন j>=0 এবং ls[j]>=0, do
- যদি |ls এর শেষ উপাদান|> ls[j], তারপর
- ls থেকে jth উপাদান মুছুন
- অন্যথায় যখন |ls এর শেষ উপাদান| ls[j] এর মতো, তারপর
- ls থেকে jth উপাদান মুছুন
- ls থেকে শেষ উপাদান মুছুন
- লুপ থেকে বেরিয়ে আসুন
- অন্যথায়,
- ls থেকে শেষ উপাদান মুছুন
- লুপ থেকে বেরিয়ে আসুন
- j :=j - 1
- যদি |ls এর শেষ উপাদান|> ls[j], তারপর
- যদি সংখ্যা[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]