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

讓我們看看以下實現以獲得更好的理解:

示例

即時演示

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]

更新於: 2020年12月2日

122 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告