• leetcode刷题3


    今天刷的题是LeetCode第23题。合并k个有序链表。

    该题,我现在采用的是暴力法解决。后续将添加其他解决方法。所谓的暴力法求解指的是:将链表中所有数据保存到数组中,然后统一排序,再重新生成新的链表。代码如下:

    package DynamicProgramming;
    
    import LeetCodePart1.ListNode;
    import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
    import org.w3c.dom.ls.LSOutput;
    
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.LinkedList;
    import java.util.List;
    
    /**
     * @date 2019/8/7
     * @description 合并K个有序链表
     */
    public class MergeKLink {
        public static ListNode merge1(ListNode[] lists){
            /**
            * @param lists
             * @Description 这是合并k个有序链表的第一个方法。暴力法
             * 暴力法的求解思路是:先将所有的链表中的数据保存到一个数组中,然后排序,再生成新的链表
             */
            int size=lists.length;
            List<Integer> list=new ArrayList<>();
            for (int i = 0; i <size ; i++) {
                while (lists[i]!=null){
                    list.add(lists[i].getVal());
                    lists[i]=lists[i].getNext();
                }
            }
            Collections.sort(list);
            ListNode result=new ListNode(list.get(0));
            ListNode point =result;
            for (int i = 0; i <list.size() ; i++) {
                point.setNext(new ListNode(list.get(i)));
                point=point.getNext();
            }
            return result.getNext();
        }
    }

     当然也可以挨个挨个比较,比较每个链表的头结点,找出最小的,然后放到新的链表中。代码如下:

    public static ListNode merge2(ListNode[] lists){
            /**
            * @param lists
             * @Description 挨个比较
             */
            ListNode result=new ListNode(0);
            ListNode point=result;
            boolean flag=MergeKLink.compare(lists);
            while (flag){
                int minNum = 0;
                int minIndex=0;
                for (int i = 0; i <lists.length ; i++) {
                    if (lists[i]!=null){
                        minNum=lists[i].getVal();
                        minIndex=i;
                        break;
                    }
                }
                for (int i = 0; i <lists.length ; i++) {
                    if (lists[i]!=null && lists[i].getVal()<minNum){
                            minNum=lists[i].getVal();
                            minIndex=i;
                        }
                }
                lists[minIndex]=lists[minIndex].getNext();
                flag=MergeKLink.compare(lists);
                point.setNext(new ListNode(minNum));
                point=point.getNext();
            }
            return result.getNext();
        }
        public static boolean compare(ListNode[] lists){
            boolean flag=false;
            for (int i = 0; i <lists.length ; i++) {
                if (lists[i]!=null){
                    flag=true;
                }
            }
            return flag;
        }
  • 相关阅读:
    将new Date()的时间转换为常用时间格式
    封装通用的jsonp方式
    javascript实现手机震动API代码
    webstorm 2016.3.2 破解代码(免费)
    淘宝镜像在npm中执行的代码
    jQuery lazyload 懒加载
    uniapp小程序获取时间戳转换时间例子
    微信小程序解析HTML标签
    微信小程序之tab切换效果
    巧用weui.gallery(),点击图片后预览图片
  • 原文地址:https://www.cnblogs.com/cquer-xjtuer-lys/p/11317736.html
Copyright © 2020-2023  润新知