首页 > 其他分享 >[LeetCode] LeetCode373. 查找和最小的K对数字

[LeetCode] LeetCode373. 查找和最小的K对数字

时间:2023-12-17 17:26:07浏览次数:39  
标签:Node LeetCode373 int res sum 查找 heap new LeetCode

题目描述

思路:大顶堆+翻转

注意:该题有问题,代码可以通过测试用例。

方法一:

class Solution {
    public List<List<Integer>> kSmallestPairs(int[] nums1, int[] nums2, int k) {
        PriorityQueue<Node> heap = new PriorityQueue<>((e1, e2) -> e2.sum - e1.sum);
        List<List<Integer>> res = new ArrayList<>();
        for (int i = 0; i < nums1.length; i ++) {
            for (int j = 0; j < nums2.length; j ++) {
                heap.add(new Node(i, j, nums1[i] + nums2[j]));
                if (heap.size() > k) {
                    heap.remove();
                }
            }
        }
        while (!heap.isEmpty()) {
            Node node = heap.remove();
            List<Integer> list = new ArrayList<>(Arrays.asList(nums1[node.i], nums2[node.j]));
            res.add(list);
        }
        Collections.reverse(res);
        return res;
    }

    class Node {
        private int i;
        private int j;
        private int sum;

        public Node(int i, int j, int sum) {
            this.i = i;
            this.j = j;
            this.sum = sum;
        }
    }
}

标签:Node,LeetCode373,int,res,sum,查找,heap,new,LeetCode
From: https://www.cnblogs.com/keyongkang/p/17909369.html

相关文章

  • linux查找文件
    linux查找文件常用的有find和whereis两种方式.find适用于复杂的查询,指定目录和文件名,通常可以找到你想要的文件.不要指定从根目录开始找,与其这样不如先推测一下这个文件可能在什么地方.whereis通常用来定位二进制文件,帮助文件,源码文件,默认情况下是在包管理......
  • [LeetCode138-链表-中等] 复制带有随机指针的链表
    这道题是这样的,就是说有一个链表LindedNode,通常我们链表包含2个属性,一个是它的值val,另一个是它指向的下一个结点nextNode,但是这个题目中的链表还有一个属性,就是它还有个随机指针,这个随机指针可能指向链表中的任意结点(包括链表的结尾null结点,或者是自己)也就是说这个链表Lin......
  • [LeetCode] LeetCode378. 有序矩阵中第K小的元素
    题目描述思路:Top-K问题+大顶堆使用大顶堆求第K小的元素。方法一:classSolution{publicintkthSmallest(int[][]matrix,intk){//1.使用大顶堆PriorityQueue<Integer>heap=newPriorityQueue<>((e1,e2)->e2-e1);for(inti......
  • [LeetCode] LeetCode692. 前K个高频单词
    题目描述思路注意是前K个高频单词,就是TopK问题,只能用小根堆找最大的K个元素啊,用大根堆找的就是最小的K个元素了思路一:classSolution{publicList<String>topKFrequent(String[]words,intk){Map<String,Integer>map=newHashMap<>();//小......
  • [LeetCode] LeetCode451. 根据字符出现频率排序
    题目描述思路:使用大顶堆方法一:classSolution{publicStringfrequencySort(Strings){//1.HashMap统计词频Map<Character,Integer>map=newHashMap<>();for(charc:s.toCharArray()){map.put(c,map.getOrDefault(......
  • [LeetCode] 2482. Difference Between Ones and Zeros in Row and Column
    Youaregivena0-indexedmxnbinarymatrixgrid.A0-indexedmxndifferencematrixdiffiscreatedwiththefollowingprocedure:LetthenumberofonesintheithrowbeonesRowi.LetthenumberofonesinthejthcolumnbeonesColj.Letthenumbero......
  • 旋转数组 二分查找变种
    题目搜索旋转排序数组整数数组nums按升序排列,数组中的值互不相同。在传递给函数之前,nums在预先未知的某个下标k(0<=k<nums.length)上进行了旋转,使数组变为[nums[k],nums[k+1],...,nums[n-1],nums[0],nums[1],...,nums[k-1]](下标从0开始计数)。例如,[0,1,2,......
  • [LeetCode] LeeCode703. 数据流中的第K大元素
    题目描述思路:最小堆好好领悟这个代码://将nums数组所有元素插入小根堆中for(intnum:nums){ heap.offer(num); //当小根堆的容量大于k时,就删除堆顶元素 if(heap.size()>k)heap.poll();}当heap.size()==k的时候,还是会再添加一个元素,此时堆内部会已经排好序,......
  • 线性探测法的查找函数 整型关键字的散列映射
    一、 实验目的掌握哈希表二、  实验内容实验题目线性探测法的查找函数整型关键字的散列映射  三、   设计文档 1.   2.   四、   源程序  1. PositionFind(HashTableH,ElementTypeKey){    intflag=0;    Positionp......
  • 线性探测法的查找函数
    #include<stdio.h>#defineMAXTABLESIZE100000/*允许开辟的最大散列表长度*/typedefintElementType;/*关键词类型用整型*/typedefintIndex;/*散列地址类型*/typedefIndexPosition;/*数据所在位置与散列地址是同一类型*//*散列单元状态类......