🔗 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));
}
return nums;
}
};