3266. Final Array State After K Multiplication Operations II
Description
You are given an integer array nums
, an integer k
, and an integer multiplier
.
You need to perform k
operations on nums
. In each operation:
- Find the minimum value
x
innums
. If there are multiple occurrences of the minimum value, select the one that appears first. - Replace the selected minimum value
x
withx * multiplier
.
After the k
operations, apply modulo 109 + 7
to every value in nums
.
Return an integer array denoting the final state of nums
after performing all k
operations and then applying the modulo.
Example 1:
Input: nums = [2,1,3,5,6], k = 5, multiplier = 2
Output: [8,4,6,5,6]
Explanation:
Operation | Result |
---|---|
After operation 1 | [2, 2, 3, 5, 6] |
After operation 2 | [4, 2, 3, 5, 6] |
After operation 3 | [4, 4, 3, 5, 6] |
After operation 4 | [4, 4, 6, 5, 6] |
After operation 5 | [8, 4, 6, 5, 6] |
After applying modulo | [8, 4, 6, 5, 6] |
Example 2:
Input: nums = [100000,2000], k = 2, multiplier = 1000000
Output: [999999307,999999993]
Explanation:
Operation | Result |
---|---|
After operation 1 | [100000, 2000000000] |
After operation 2 | [100000000000, 2000000000] |
After applying modulo | [999999307, 999999993] |
Constraints:
1 <= nums.length <= 104
1 <= nums[i] <= 109
1 <= k <= 109
1 <= multiplier <= 106
Solutions
Solution 1: Priority Queue (Min-Heap) + Simulation
Let the length of the array \(\textit{nums}\) be \(n\), and the maximum value be \(m\).
We first use a priority queue (min-heap) to simulate the operations until we complete \(k\) operations or all elements in the heap are greater than or equal to \(m\).
At this point, all elements in the array are less than \(m \times \textit{multiplier}\). Since \(1 \leq m \leq 10^9\) and \(1 \leq \textit{multiplier} \leq 10^6\), \(m \times \textit{multiplier} \leq 10^{15}\), which is within the range of a 64-bit integer.
Next, each operation will turn the smallest element in the array into the largest element. Therefore, after every \(n\) consecutive operations, each element in the array will have undergone exactly one multiplication operation.
Thus, after the simulation, for the remaining \(k\) operations, the smallest \(k \bmod n\) elements in the array will undergo \(\lfloor k / n \rfloor + 1\) multiplication operations, while the other elements will undergo \(\lfloor k / n \rfloor\) multiplication operations.
Finally, we multiply each element in the array by the corresponding number of multiplication operations and take the result modulo \(10^9 + 7\). This can be calculated using fast exponentiation.
The time complexity is \(O(n \times \log n \times \log M + n \times \log k)\), and the space complexity is \(O(n)\). Here, \(n\) is the length of the array \(\textit{nums}\), and \(M\) is the maximum value in the array \(\textit{nums}\).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
|