Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาสถานะจรวดหลังชนกันใน Python


รายการ 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]