0
点赞
收藏
分享

微信扫一扫

基于R语言piecewiseSEM结构方程模型在生态环境领域技术教程

GG_lyf 03-14 15:00 阅读 1

思路

  • 链接:找出数组的第k大和

  • 代码


typedef long long LL;
typedef pair<LL, LL> pii;
class Solution {
public:
    long long kSum(vector<int>& nums, int k) {
        priority_queue<pii, vector<pii>, greater<pii>> q;
        LL maxx = 0; int n = nums.size();
        for(int i = 0; i < n; i ++)
        {
            if(nums[i] >= 0) maxx += nums[i];
            nums[i] = abs(nums[i]);
        }

        sort(nums.begin(), nums.end());
        //{a,b}   序列和为a,序列最后一个是nums[b]
        q.push((pii){nums[0], 0}); LL res = 0;// 省略放空集,从第2小开始
        for(int i = 1; i < k; i ++)
        {
            auto [a, b] = q.top();
            q.pop();
            res = a;
            if(b >= n-1) continue;
            // push 规则是 每次在原基础上加入下一个 或者 去掉当前的然后再加入下一个,这样可以保证 每次加入的都比之前的大,并且不重不漏。
            q.push({a+nums[b+1], b+1});
            q.push({a-nums[b]+nums[b+1], b+1});
        }
        return maxx - res;
    }
};

举报

相关推荐

0 条评论