:::warning
是将每次的最大礼物数平方根,不是只按照初始那个list来看

:::

首先 看到题目首先的思路是先从大到小排序,那么第一个数就是最大的,对他进行平方根的操作并替换

但是只进行一次从大到小排序会出现因进行平方根导致最大数变化的情况

因此将他放入每次的循环中

1
2
3
4
5
6
7
8
9
10
11
12
class Solution:
def pickGifts(self, gifts: List[int], k: int) -> int:
# gifts.sort(reverse=True)
num = 0
for i in range(0, k):
gifts.sort(reverse=True)
gifts[0] = max(gifts) ** 0.5

for j in gifts:
num = int(j) + num

return num

使用math里面的sqrt函数可以进一步优化

1
2
3
4
5
6
7
8
9
10
11
12
class Solution:
def pickGifts(self, gifts: List[int], k: int) -> int:
# gifts.sort(reverse=True)
num = 0
for i in range(0, k):
gifts.sort(reverse=True)
gifts[0] = sqrt(gifts[0])

for j in gifts:
num = int(j) + num

return num

sum可以完成求和的操作,所以直接优化最后一个for

1
2
3
4
5
6
7
class Solution:
def pickGifts(self, gifts: List[int], k: int) -> int:
for i in range(0, k):
gifts.sort(reverse=True)
gifts[0] = int(sqrt(gifts[0]))

return sum(gifts)