【LeetCode】2386. 找出数组的第 K 大和

给你一个整数数组 nums 和一个 正 整数 k 。你可以选择数组的任一 子序列 并且对其全部元素求和。

数组的 第 k 大和 定义为:可以获得的第 k 个 最大 子序列和(子序列和允许出现重复)

返回数组的 第 k 大和 。

子序列是一个可以由其他数组删除某些或不删除元素排生而来的数组,且派生过程不改变剩余元素的顺序。

注意:空子序列的和视作 0 。


class Solution {
    /**
    思路很厉害,先求最大值,然后对数组取绝对值进行排序,对新数组利用最小堆进行全排列
     */
    public long kSum(int[] nums, int k) {
        long sum = 0;
        int n = nums.length;
        for(int i=0; i<n; i++) {
            if(nums[i]>=0) {
                sum += nums[i];
            } else {
                nums[i] = -nums[i];
            }
        }
        Arrays.sort(nums);
        PriorityQueue<Pair<Long, Integer>> pq = new PriorityQueue<>((a,b)->Long.compare(a.getKey(),b.getKey()));
        pq.offer(new Pair<>(0L,0));
        while(--k>0) {
            Pair<Long,Integer> pair = pq.poll();
            Long s = pair.getKey();
            int i = pair.getValue();
            if(i<n) {
                pq.offer(new Pair<>(s+nums[i],i+1));
                if(i>0) {
                    pq.offer(new Pair<>(s-nums[i-1]+nums[i], i+1));
                }
            }
        }

        return sum-pq.peek().getKey();
    }
}

补充:PriorityQueue的用法

不指定Comparator时默认为最小堆,通过传入自定义的Comparator函数可以实现大顶堆。使用offer添加元素,使用poll取出元素。
最小堆:每次poll的时候,都是取最小值。

// 这个结构很常用
PriorityQueue<Pair<Long, Integer>> pq = new PriorityQueue<>((a,b)->Long.compare(a.getKey(),b.getKey()));

相关推荐

  1. LeetCode2386. K

    2024-03-10 06:26:05       21 阅读
  2. leetcode 2386. K 【小根堆】

    2024-03-10 06:26:05       20 阅读
  3. LeetCode每日一题[C++]-K

    2024-03-10 06:26:05       18 阅读
  4. 2024.3.9力扣每日一题—— K

    2024-03-10 06:26:05       15 阅读
  5. leetcode 2834.美丽最小

    2024-03-10 06:26:05       17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-10 06:26:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-10 06:26:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-10 06:26:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-10 06:26:05       18 阅读

热门阅读

  1. python绘制水果价格与利润表图1-3

    2024-03-10 06:26:05       18 阅读
  2. 网页的用户注册功能

    2024-03-10 06:26:05       22 阅读
  3. 【Spring高级】第3讲 Bean的生命周期

    2024-03-10 06:26:05       21 阅读
  4. 力扣382周赛

    2024-03-10 06:26:05       20 阅读
  5. 人机环境系统与媒体

    2024-03-10 06:26:05       24 阅读
  6. 【AIGC调研系列】大模型的system prompt破解调研

    2024-03-10 06:26:05       20 阅读
  7. Spring MVC 简单文件上传

    2024-03-10 06:26:05       22 阅读
  8. 大模型概念解析 | Prompt Engineering

    2024-03-10 06:26:05       19 阅读
  9. Git基于master创建新分支

    2024-03-10 06:26:05       20 阅读
  10. linux+边缘部署学习记录

    2024-03-10 06:26:05       24 阅读