假设我们有一个称为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]