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