Python中的最后一块重量

假设我们有一些岩石,每个岩石都有一个正整数权重。在每个回合中,我们将拿起两个最重的岩石并将它们粉碎在一起。考虑宝石的权重为x和y,且x <= y。粉碎的结果可能有两种。

  • 如果x = y,则两块石头都被完全破坏;

  • 否则,当x!= y时,重量为x的石头将被完全破坏,重量为y的石头将具有新的重量yx。

最后,最多剩下1块石头。我们必须找到这块石头的重量(如果没有石头,则为0。)

因此,如果石头权重为[2,7,4,1,8,1],则结果将为1。首先选择7和8,然后得到1,所以数组将为[2,4,1,1 ,1],然后取2和4。数组将为[2,1,1,1],然后选择2和1,数组将为[1,1,1],然后选择权重为1的两块宝石然后两者都将被销毁,因此array为[1]。这就是答案

为了解决这个问题,我们将遵循以下步骤-

  • 如果重量块W没有元素,则返回0

  • 如果W只有一个元素,则返回W [0]

  • 而W有多个元素-

    • 排序W

    • s1:= W的最后一个元素,s2:= W的倒数第二个元素

    • 如果s1 = s2,则从W中删除s1和s2

    • 否则s1:= | s1 – s2 |,从W中删除最后一个元素,然后将s1设置为W的最后一个元素

  • 如果W有一个元素,则返回该元素,否则返回0

示例

让我们看下面的实现以更好地理解-

class Solution(object):
   def lastStoneWeight(self, stones):
      """
      :type stones: List[int]
      :rtype: int
      """
      if len(stones) ==0:
         return 0
      if len(stones) == 1:
         return 1
      while len(stones)>1:
         stones.sort()
         s1,s2=stones[-1],stones[-2]
         if s1==s2:
            stones.pop(-1)
            stones.pop(-1)
         else:
            s1 = abs(s1-s2)
            stones.pop(-1)
            stones[-1] = s1
      if len(stones):
         return stones[-1]
      return 0
ob1 = Solution()print(ob1.lastStoneWeight([2,7,4,1,6,1]))

输入值

[2,7,4,1,6,1]

输出结果

1