给你一个整数数组 nums
,一个整数 k
和一个整数 multiplier
。
你需要对 nums
执行 k
次操作,每次操作中:
- 找到
nums
中的 最小 值x
,如果存在多个最小值,选择最 前面 的一个。 - 将
x
替换为x * multiplier
。
k
次操作以后,你需要将 nums
中每一个数值对 109 + 7
取余。
请你返回执行完 k
次乘运算以及取余运算之后,最终的 nums
数组。
class Solution:def getFinalState(self, nums: List[int], k: int, multiplier: int) -> List[int]:if multiplier == 1: # 数组不变return numsMOD = 1_000_000_007n = len(nums)mx = max(nums)h = [(x, i) for i, x in enumerate(nums)]heapify(h)# 模拟,直到堆顶是 mxwhile k and h[0][0] < mx:x, i = h[0]heapreplace(h, (x * multiplier, i))k -= 1# 剩余的操作可以直接用公式计算 h.sort()for i, (x, j) in enumerate(h):nums[j] = x * pow(multiplier, k // n + (i < k % n), MOD) % MODreturn nums