在python碰撞后查找火箭最终状态的程序

假设我们有一个称为nums的数字列表,它表示火箭的大小和方向。正整数表示右边,负数表示左边。这个数字的绝对值代表火箭的大小。现在,当两枚火箭相撞时,较小的一枚将被摧毁,而较大的一枚将继续前进。当它们大小相同的火箭相撞时,它们都会被摧毁。当两枚火箭朝同一方向移动时,它们将永远不会碰撞(假设火箭速度相同)。在所有碰撞之后,我们必须找到火箭的状态。

因此,如果输入类似于nums = [3,8,5,-5],则输出将为[3,8],因为5和-5将被销毁,其余的将继续存在。

为了解决这个问题,我们将遵循以下步骤-

  • ls:=一个具有一个元素nums [0]的新列表

  • 对于范围从1到nums的i-1,执行

    • 在LS的末尾插入nums [i]

    • j:= ls的大小-2

    • 当j> = 0且ls [j]> = 0时,

    • 从ls中删除-last元素

    • 从循环中出来

    • 从ls中删除第j个元素

    • 从ls删除最后一个元素

    • 从循环中出来

    • 从ls中删除第j个元素

    • 如果| ls的最后一个元素| > ls [j],然后

    • 否则|| ls的最后一个元素| 与ls [j]相同,则

    • 除此以外,

    • j:= j-1

    • 在LS的末尾插入nums [i]

    • 如果nums [i]> = 0,则

    • 除此以外,

    • 返回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]