【每日一题】3266. K 次乘运算后的最终数组 I&II
给你一个整数数组 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 nums MOD = 1_000_000_007 n = len(nums) mx = max(nums) h = [(x, i) for i, x in enumerate(nums)] heapify(h) # 模拟,直到堆顶是 mx while 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) % MOD return nums