【每日一题】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

浙公网安备 33010602011771号