题目浅析

  • 想查看原题可以点击题目链接

  • 简单地说,就是给一堆一维数组,每次操作取最大值,并减去这个值一半的去小数的底值,共执行 k 次,求最终的数组和。

思路分享

代码解答(强烈建议自行解答后再看)

  • 参考题解
1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution:
def minStoneSum(self, piles: List[int], k: int) -> int:
stoneSum = sum(piles)
for i in range(len(piles)):
piles[i] = -piles[i]
heapify(piles)
for _ in range(k):
max_stone = piles[0] // 2 #负数情况下,消除小数部分,相当于 ceil,相当于减去 floor
# print(max_stone)
stoneSum += piles[0] - max_stone
heapreplace(piles, max_stone)
return stoneSum