LeetCode 3264. Final Array State After K Multiplication Operations I

36 阅读1分钟

🔗 leetcode.com/problems/fi…

题目

  • 给定一个数组 nums
  • 进行 k 次操作,每次选取 nums 中的最小值,若值相等,选取 index 最小的
  • 对该数乘以 multiplier
  • 返回进行 k 次之后的 nums

思路

  • 模拟,使用优先队列

代码

class Solution {
public:
    vector<int> getFinalState(vector<int>& nums, int k, int multiplier) {
        auto cmp = [](pair<int, int> left, pair<int, int> right) {
                if (left.first == right.first) return left.second > right.second;
		        return left.first > right.first;
        };
        std::priority_queue<pair<int, int>, std::vector<pair<int, int>>, decltype(cmp)> hp;
        
        for (int i = 0; i < nums.size(); i++) {
            hp.push(make_pair(nums[i], i));
        }

        while (k--) {
            auto p = hp.top(); hp.pop();
            nums[p.second] *= multiplier;
            hp.push(make_pair(nums[p.second], p.second));
            //printf("p.second %d value %d\n", p.second, nums[p.second]);
        }

        return nums;
    }
};