在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
- 如果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]