Python程式:查詢火箭碰撞後的最終狀態
假設我們有一個名為nums的數字列表,它表示火箭的大小和方向。正整數表示向右,負數表示向左。數字的絕對值表示火箭的大小。現在,當兩枚火箭碰撞時,較小的火箭會被摧毀,較大的火箭將繼續其旅程而不受影響。當兩枚火箭大小相同時且發生碰撞時,它們都會被摧毀。當兩枚火箭朝同一方向移動時,它們永遠不會碰撞(假設火箭速度相同)。我們必須找到所有碰撞後火箭的狀態。
因此,如果輸入類似於nums = [3, 8, 5, -5],則輸出將為[3, 8],因為5和-5將被摧毀,其餘將存活。
為了解決這個問題,我們將遵循以下步驟:
- ls := 一個包含nums[0]作為唯一元素的新列表
- 對於從1到nums大小-1的範圍內的i,執行以下操作:
- 如果nums[i] >= 0,則
- 將nums[i]插入到ls的末尾
- 否則,
- 將nums[i]插入到ls的末尾
- j := ls的大小-2
- 當j >= 0且ls[j] >= 0時,執行以下操作:
- 如果|ls的最後一個元素| > ls[j],則
- 從ls中刪除第j個元素
- 否則,當|ls的最後一個元素|與ls[j]相同時,則
- 從ls中刪除第j個元素
- 從ls中刪除最後一個元素
- 退出迴圈
- 否則,
- 從ls中刪除-最後一個元素
- 退出迴圈
- j := j - 1
- 如果|ls的最後一個元素| > ls[j],則
- 如果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]
廣告