3264 - Final Array State After K Multiplication Operations I

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 in nums. If there are multiple occurrences of the minimum value, select the one that appears first.
  • Replace the selected minimum value 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:

OperationResult
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]

Example 2:

Input: nums = [1,2], k = 3, multiplier = 4

Output: [16,8]

Explanation:

OperationResult
After operation 1[4, 2]
After operation 2[4, 8]
After operation 3[16, 8]

 Constraints:

  • 1 <= nums.length <= 100
  • 1 <= nums[i] <= 100
  • 1 <= k <= 10
  • 1 <= multiplier <= 5

C++

  • class Solution {
    public:
        vector<int> getFinalState(vector<int>& nums, int k, int multiplier) {
            auto cmp = [&nums](int i, int j) {
                return nums[i] == nums[j] ? i > j : nums[i] > nums[j];
            };
            priority_queue<int, vector<int>, decltype(cmp)> pq(cmp);
    
            for (int i = 0; i < nums.size(); ++i) {
                pq.push(i);
            }
    
            while (k--) {
                int i = pq.top();
                pq.pop();
                nums[i] *= multiplier;
                pq.push(i);
            }
    
            return nums;
        }
    };

JAVA

class Solution {
    public int[] getFinalState(int[] nums, int k, int multiplier) {
        PriorityQueue<Integer> pq
            = new PriorityQueue<>((i, j) -> nums[i] - nums[j] == 0 ? i - j : nums[i] - nums[j]);
        for (int i = 0; i < nums.length; i++) {
            pq.offer(i);
        }
        while (k-- > 0) {
            int i = pq.poll();
            nums[i] *= multiplier;
            pq.offer(i);
        }
        return nums;
    }
}

PYTHON

  • class Solution {
    public:
        vector<int> getFinalState(vector<int>& nums, int k, int multiplier) {
            auto cmp = [&nums](int i, int j) {
                return nums[i] == nums[j] ? i > j : nums[i] > nums[j];
            };
            priority_queue<int, vector<int>, decltype(cmp)> pq(cmp);
    
            for (int i = 0; i < nums.size(); ++i) {
                pq.push(i);
            }
    
            while (k--) {
                int i = pq.top();
                pq.pop();
                nums[i] *= multiplier;
                pq.push(i);
            }
    
            return nums;
        }
    };

Comments