`
ouqi
  • 浏览: 41322 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

[leetcode]k路排序

阅读更多

K路排序每次相当于从K个数中选择最小的一个,加入结果数组,然后把对应的index+1,加入新的数去比较。

对于简单的2路或者3路排序,从这2个或者3个中选择最小的一个是比较方便的,但是如果要从K个数中选择最小,而且这K个数会不断更新,那想一想,这里面最完美的数据结构就是小顶堆呀!堆顶永远是最小的元素,将其取出,其所在数组的index++,将之后所在数组的后一元素加入队列,再次进行比较!

java中用优先级队列即可

public class Solution {
    class ListNodeComparator implements Comparator<ListNode>{
            public int compare(ListNode o1, ListNode o2){
	            return o1.val - o2.val;
	        }
	    }
	    public ListNode mergeKLists(ArrayList<ListNode> lists) {
	        // Start typing your Java solution below
	        // DO NOT write main() function
	        if(lists == null||lists.size()==0) return null;
	        PriorityQueue<ListNode> heap = new PriorityQueue<ListNode>(11,new ListNodeComparator());
	        for(ListNode node:lists)
	            if(node!=null) heap.add(node);
	        ListNode head = null;
	        ListNode p = null;
	        ListNode q = null;
	        while(!heap.isEmpty()){
	            q = heap.poll();
                if(q.next!=null) heap.add(q.next);
	            if(head == null) {head = q;p = q;}
                else{
	                p.next = q;
	                p = p.next;
                }
	        }
	        return head;
	        
	    }
}

 

分享到:
评论

相关推荐

    LeetCode 23. 合并K个排序链表

    合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。 示例: 输入: [ 1-&gt;4-&gt;5, 1-&gt;3-&gt;4, 2-&gt;6 ] 输出: 1-&gt;1-&gt;2-&gt;3-&gt;4-&gt;4-&gt;5-&gt;6 来源:力扣(LeetCode) 链接:...

    LeetCode刷题模板.pdf

    1.4. LeetCode中二分查找题目 29 2. 双指针 30 2.1. 快慢指针 31 2.1.1. 什么是快慢指针 31 2.1.2. 快慢指针模板 31 2.1.3. 快慢指针相关题目 32 2.1.3.1. LC-141:链表是否有环 32 2.1.3.2. LC-142:环形链表入口 34 ...

    leetcode71python-leetcode:leetcode

    个排序列表(难) leetcode 25 - k-Group 中的反向节点(硬) leetcode 30 - 连接所有单词的子串(HARD) leetcode 32. 最长有效括号 (HARD) leetcode 37. 数独求解器(难) leetcode 41. First Missing Positive ...

    zwangZJU#LeetCode-in-python-wznote#LeetCode-python-23-合并K个排序链表1

    示例输入:输出: 1-&gt;1-&gt;2-&gt;3-&gt;4-&gt;4-&gt;5-&gt;6解题思路将k个链表建立成一个最小堆,再从堆顶pop()出每一个元素,连接成链表heapq是pyth

    leetcode中文版-LeetCode-Solution-PPT:我给LeetCode中文版制作的题解PPT

    leetcode中文版 LeetCode-Solution-PPT 刷题过程中在 LeetCode 中文版提交的题解和动画 LeetCode 第 23 题:合并 K 个排序链表 题解地址: LeetCode 第 41 题:缺失的第一个正数 题解地址: LeetCode 第 60 题:第 k...

    LeetCode解题总结

    LeetCode解题总结 1. 数组 1.1 从有序数组中删除重复元素 1.2 在排序数组被旋转后进行查找 1.3 寻找两个排序数组的中位数 1.4 最长连续序列 1.5 累加和 1.6 移除数组中指定值 1.7 下一个排列 1.8 第n个全排列 1.9 ...

    leetcode二维数组-23:合并k个排序列表-https://leetcode.com/problems/merge-k-sorted-l

    leetcode二维数组合并 k 个排序列表 #23 什么是分而治之的算法? 问题是什么? 看问题。 运行时和空间复杂度 mergeKLists()的运行时间为0(n*m)因为它需要一个大小为n的嵌套 for 循环,其中n是行数, m是列数。 这个...

    leetcode蓄水池JAVA-coding-interview:面试中编码问题的学习笔记

    leetcode 蓄水池JAVA 编程面试 学习资源 基本 复杂 数据结构 解决方案模式 问题模式 前 K 和 Kth 顶K 第 K 个 LeetCode-215 数组中第 K 大的元素 LeetCode-703 流中第 K 大的元素 LeetCode-BST 中第 230 K 个最小的...

    Leetcode扑克-LeetCode:LeetCode部分习题OC版

    合并K个排序链表 Day04 验证二叉搜索树 Day05 二叉树中的最大路径和 Day06 二叉树展开为链表 Day07 动态规划:打家劫舍 Day08 前 K 个高频元素 Day09 有效的数独 Day10 获取字符串里的回文子串 Day11 摆动排序 Day12...

    leetcode中文版-leetcode:leetcode

    leetcode中文版车鸟 一组用python编写的算法。 种类 冒泡排序 插入排序 归并排序 桶排序 计数排序 基数排序 选择排序 快速排序 堆排序 搜索 二分查找 深度优先搜索 广度优先搜索 递归 json 漂亮的打印 过滤中文文件 ...

    leetcode寻找最近的-LeetCode:LeetCode漫漫刷题之路

    LeetCode漫漫刷题之路 鹅厂面试题之数组与字符串 1、两数之和 2、寻找两个有序数组的中位数 3、最长回文子串 4、字符串转换整数 (atoi) 5、最长公共前缀 6、三数之和 7、最接近的三数之和 8、有效的括号 9、删除排序...

    Python算法题源代码-LeetCode(力扣)-搜索旋转排序数组

    在传递给函数之前,nums 在预先未知的某个下标 k(0 &lt;= k )上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] ...

    leetcode跳跃-leetcode:leetcode刷题笔记

    leetcode 跳跃 leetcode刷题笔记 005-2. 最长回文子串 字符串+中心扩散 :star:010-3. 正则表达式匹配 动态规划 019-2. 删除链表的倒数第N个节点 链表+快慢指针 022-2. 括号生成 回溯法 :star:031-2. 下一个排列 数组...

    leetcode跳跃-leetcode:leetcode解题之路

    leetcode 跳跃 leetcode 按题型标签,记录...合并K个排序链表](./Heap/merge-k-sorted-lists.md) String 字符串 [0006 Z字形变换](./String/zigzag-conversion.md) [0030 串联所有单词的子串](./String/substring

    leetcode1004-LeetCode_Flower_Road:LeetCode_Flower_Road

    leetcode ...K 的子阵列乘积:解: Q 977. 有序数组的平方:解: Q 1004. Max Consecutive Ones III:解决方案: Q 1202. 带交换的最小字符串:解决方案: Q 1493. 删除一个元素后 1 的最长子数组: 解:

    leetcode分类-LeetCode:LeetCode刷题记录,主要记录代码和做题思路

    leetcode 分类 LeetCode LeetCode刷题记录,记录代码和做题思路。 算法 167. 两数之和 II - 输入有序数组: 633. 平方数之和: 345. 反转字符串中的元音字母: 680. 验证回文字符串 Ⅱ: 88. 合并两个有序数组: 141. ...

    leetcode航班预订-LeetCode::ledger:Leetcode-Java答案

    23.合并K个排序链表 32.最长有效括号 \ 94.二叉树的中序遍历 力扣每日一题 leetcode周赛 第184周 List :pushpin: :pushpin: :pushpin: Type :pushpin: :green_heart::balloon: :orange_heart::balloon: :blue_heart:...

    leetcode周赛积分-LEETCODE:leetcode的问题

    快速排序) 链表 问题编号 名称 语境 002 两个数字相加 206 反向链表 , 迭代, 两个指针 简单的 092 反向链表Ⅱ , 迭代, 两个指针 中等的 024 成对交换节点 , 迭代, 两个指针 中等的 025 k-Group 中的反向节点 , 迭代...

Global site tag (gtag.js) - Google Analytics