1046
题意: 找出数列中最大的两个值且删除,大减小,若不为零则加入到数组,若为0则都删除
class Solution:
def lastStoneWeight(self, stones: List[int]) -> int:
while len(stones) > 1:
stones.sort()
m = stones[-1] - stones[-2]
stones.pop()
stones.pop()
if m == 0:
pass
else:
stones.append(m)
if len(stones)==1:
return stones[0]
else:
return 0
这个是常规思路,可能
再还可以用heapq做,里面有一个函数是找到最小值
图片截图于AaronWu
import heapq
stones = list(map(int, input().split()))
heap = []
for i in stones:
heapq.heappush(heap, -i)
# print('a',heap)
while len(heap) > 1:
f = heapq.heappop(heap) * -1
s = heapq.heappop(heap) * -1
val = abs(f - s)
heapq.heappush(heap, -val)
# print(f,s,heap)
print(heap[0] if heap[0] > 0 else heap[0] * -1)
这里因为找的是最小值,所以都* -1处理,同时函数可以将该数删除