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:
x in nums. If there are multiple occurrences of the minimum value, select the one that appears first.x with x * multiplier.Return an integer array denoting the final state of nums after performing all k operations.
Example 1:
Input: nums = [2,1,3,5,6], k = 5, multiplier = 2
Output: [8,4,6,5,6]Explanation : [2, 2, 3, 5, 6] -> [4, 2, 3, 5, 6] -> [4, 4, 3, 5, 6] -> [4, 4, 6, 5, 6] -> [8, 4, 6, 5, 6]
Example 2:
Input: nums = [1,2], k = 3, multiplier = 4
Output: [16,8]Explanation: [4, 2] -> [4, 8] -> [16, 8]
Constraints:
1 <= nums.length <= 1001 <= nums[i] <= 1001 <= k <= 101 <= multiplier <= 5The problem asks us to repeatedly find the minimum element and multiply it by a given multiplier. A straightforward approach is to simulate exactly what the problem describes: for each of the k operations, scan through the array to find the smallest element (choosing the first occurrence if there are ties), then multiply that element by the multiplier.
k times:multiplier.Where is the size of the input array, and is the number of operations.
Instead of scanning the entire array each time to find the minimum, we can use a min-heap (priority queue) to efficiently retrieve the smallest element. The heap keeps elements sorted by their value, and when values are equal, by their index. After extracting the minimum, we multiply it, update the result array, and push the updated value back into the heap.
(value, index) for each element.k times:multiplier.(new_value, index) back into the heap.class Solution:
def getFinalState(self, nums: List[int], k: int, multiplier: int) -> List[int]:
res = nums[:]
min_heap = [(num, i) for i, num in enumerate(nums)]
heapq.heapify(min_heap)
for _ in range(k):
num, i = heapq.heappop(min_heap)
res[i] *= multiplier
heapq.heappush(min_heap, (res[i], i))
return resTime complexity:
Space complexity:
Where is the size of the input array, and is the number of operations.