题解 | #合并k个已排序的链表#

https://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6

/**
分享一个投机取巧的方法
观察题目可以看到取值为-1000~1000一共才2001个值,而list数量高达10^5,因此在暴力找最小之后,扫一遍所有链表头,把值相同的全连进返回值里面去,可以刚好卡进及格线
 */
class Solution {
public:
    ListNode *mergeKLists(vector<ListNode *> &lists) {
        ListNode *ret=NULL;
        ListNode *retHead=NULL;
        //int finishListNum=lists.size();
        while(1)
        {
            int tmpMinIndex=-1;
            //find min node
            for(int i=0;i<lists.size();i++)
            {
                if(lists[i]==NULL)
                    continue;
                if(tmpMinIndex==-1)//初始化
                {
                    tmpMinIndex=i;
                    continue;
                }
                if(lists[i]->val<lists[tmpMinIndex]->val)
                {
                    tmpMinIndex=i;
                }
            }
            if(tmpMinIndex==-1)
                break;
            int tmpCurrVal=lists[tmpMinIndex]->val;
            //link
            if(ret==NULL)
                retHead=ret=lists[tmpMinIndex];
            else
            {
                ret->next=lists[tmpMinIndex];
                ret=ret->next;
            }
            lists[tmpMinIndex]=lists[tmpMinIndex]->next;
            //因节点取值很少,加速一下
            for(int i=0;i<lists.size();i++)
            {
                if(lists[i]==NULL)
                    continue;
                if(lists[i]->val==tmpCurrVal)
                {
                    ret->next=lists[i];
                    ret=ret->next;
                    lists[i]=lists[i]->next;
                }
            }
        }
        return retHead;
    }
};

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 13:54
点赞 评论 收藏
分享
07-07 11:33
江南大学 Java
已经在暑假实习了&nbsp;,没有明确说有hc,纠结实习到八月份会不会有点影响秋招毕竟感觉今年好多提前批
程序员小白条:92的话准备提前批,其他没必要,没面试机会的,而且你要准备充分,尤其八股和算法题
点赞 评论 收藏
分享
下北澤大天使:你是我见过最美的牛客女孩😍
点赞 评论 收藏
分享
06-28 22:48
已编辑
广东金融学院 Java
小浪_Coding:学院本+这俩项目不是buff叠满了嘛
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 11:30
仁者伍敌:kpi都懒得刷了属于是
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务