0
点赞
收藏
分享

微信扫一扫

【力扣·每日一题】1005. K 次取反后最大化的数组和 (贪心 优先队列)


​​linkkk​​

题意:

【力扣·每日一题】1005. K 次取反后最大化的数组和 (贪心 优先队列)_算法

思路:

打完哈尔滨就没写过题,这次差点被每日一题卡住咯。
题意很重要的一点就是可以多次选择同一个下标,所以用优先队列存一下所有的数,每次取最小的数变为他的相反数。
正确性简单口胡一下:

  • 如果取出的数为正数,那么说明其他的数是比他还大的正数,将这个数变为负数的损失是最小的。
  • 如果取出的数为负数,那么他的绝对值最大,变为正数的贡献最大。

代码:

class Solution {
public:
int largestSumAfterKNegations(vector<int>& nums, int k) {
int sum=0,cnt=0;
priority_queue<int,vector<int>,greater<int>>q;
for(auto tt:nums) q.push(tt);
while(k--){
int t=q.top();q.pop();
t=t*(-1);
q.push(t);
}
while(!q.empty()){
sum=sum+q.top();
q.pop();
}
return sum;
}
};


举报

相关推荐

0 条评论