รายการ nums แทนจรวด: บวก=ขวา, ลบ=ซ้าย, ค่าสัมบูรณ์=ขนาด จรวดชนกัน ตัวเล็กทำลาย ตัวใหญ่เดินต่อ เท่ากัน ทั้งคู่ทำลาย ทิศทางเดียวกันไม่ชน หาสถานะท้ายสุด
เช่น nums=[3,8,5,-5] ให้ [3,8] เพราะ 5 และ -5 ทำลายกัน
ขั้นตอนการแก้ปัญหา
- ใช้ list
lsจำลองสแต็ก - จรวดบวก: push เข้า ls
- จรวดลบ: push แล้วเช็คย้อนหลังจรวดบวกใน ls ว่าชนกันหรือไม่ จัดการตามขนาด
ตัวอย่างโค้ด
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]