题目浅析

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

  • 简单地说,就是给一维数组,k 和 m,k 次从数组中找到最小的值,原地乘 m,求最终的数组。

思路分享

  • 本题比较重要的一点是,题目要求是在原地进行乘法操作,所以如果要用堆处理,需要同时保存下标信息。

  • 接下来就好说了,先做出保存下标信息的堆,然后不断取出小值乘 m 放回,直到达到 k 次。

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

  • 参考题解
1
2
3
4
5
6
7
8
9
10
11
class Solution:
def getFinalState(self, nums: List[int], k: int, multiplier: int) -> List[int]:
rec = [(x, i) for i, x in enumerate(nums)]
heapify(rec)
for _ in range(k):
new_num = rec[0][0] * multiplier
new_index = rec[0][1]
heapreplace(rec, (new_num, new_index))
for x, i in rec:
nums[i] = x
return nums