• Java for LeetCode 023 Merge k Sorted Lists


    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

    解题思路一:

    之前我们有mergeTwoLists(ListNode l1, ListNode l2)方法,直接调用的话,需要k-1次调用,每次调用都需要产生一个ListNode[],空间开销很大。如果采用分治的思想,对相邻的两个ListNode进行mergeTwoLists,每次将规模减少一半,直到规模变为2为止,空间开销就会小很多。JAVA实现如下:

    	static public ListNode mergeKLists(ListNode[] lists) {
    		if (lists.length == 0)
    			return null;
    		if (lists.length == 1)
    			return lists[0];
    		if (lists.length == 2)
    			return mergeTwoLists(lists[0], lists[1]);//参考Java for LeetCode 021 Merge Two Sorted Lists
    		else {
    			ListNode[] halfLists = new ListNode[lists.length / 2];
    			if (lists.length % 2 == 0)
    				for (int i = 0; i < halfLists.length; i++)
    					halfLists[i] = mergeTwoLists(lists[2 * i], lists[2 * i + 1]);
    			else {
    				for (int i = 0; i < halfLists.length; i++)
    					halfLists[i] = mergeTwoLists(lists[2 * i], lists[2 * i + 1]);
    				halfLists[0] = mergeTwoLists(halfLists[0],lists[lists.length - 1]);
    			}
    			return mergeKLists(halfLists);
    		}
    	}
    

     解题思路二:

    采用优先级队列,每次将List[]中的元素入队,然后让最小的元素出队,注意Comparator的重写,JAVA实现如下:

    public ListNode mergeKLists(ListNode[] lists) {
    		Queue<ListNode> queen = new PriorityQueue<ListNode>(
    				0,new Comparator<ListNode>() {//提交的时候不能加初始容量(第一个参数),否则报错
    					public int compare(ListNode l1, ListNode l2) {
    						return l1.val - l2.val;
    					}
    				});
    		ListNode result = new ListNode(0), index = result,poll;
    		for (ListNode list : lists)
    			if (list != null)
    				queen.add(list);
    		while (!queen.isEmpty()) {
    			poll=queen.poll();
    			index.next = new ListNode(poll.val);
    			index = index.next;
    			if (poll.next != null)
    				queen.add(poll.next);
    		}
    		return result.next;
    	}
    
  • 相关阅读:
    loadrunner测试结果分析
    规范的测试流程
    B/S架构与C/S架构的区别
    Jemter性能测试
    Android Monkey压力测试介绍
    APP测试总结
    APP测试要点
    数据库常用的操作命令
    Mysql删除表格之后,进行恢复
    Android反编译工具
  • 原文地址:https://www.cnblogs.com/tonyluis/p/4474240.html
Copyright © 2020-2023  润新知