在Python中查找火箭碰撞后的最终状态

在Python中查找火箭碰撞后的最终状态

假设有一个名为nums的数字列表,表示火箭的大小和方向。正整数表示向右移动,负数表示向左移动。数字的绝对值表示火箭的大小。当两个火箭相撞时,较小的火箭将被销毁,较大的火箭将继续不变地前进。当它们具有相同的大小和方向时,它们将同时被摧毁。如果两个火箭在同一方向上移动,则它们永远不会相撞(假设火箭速度相同)。 我们必须找出所有碰撞之后火箭的状态。

因此,如果输入为nums = [3, 8, 5, -5],则输出将为[3, 8],因为5和-5将被销毁,剩下的会幸存下来。

要解决此问题,我们将遵循以下步骤 −

  • ls:一个具有一个nums [0]元素的新列表
  • 对于范围从1到nums大小-1的i,
    • 如果nums [i] ≥ 0,则
      • 在ls的末尾插入nums [i]
    • 否则,
      • 在ls的末尾插入nums [i]
      • j:ls的大小-2
      • 当j≥0且ls [j] ≥ 0时,执行以下操作
      • 如果| ls的最后一个元素 |> ls [j],则
        • 从ls中删除第j个元素
      • 否则当| ls的最后一个元素 |与ls [j]相同时,则
        • 从ls中删除第j个元素
        • 从ls中删除最后一个元素
        • 退出循环
      • 否则,
        • 从ls中删除最后一个元素
        • 退出循环
      • j:= j-1
  • 返回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]

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程