每日一题 LCR 078. 合并 K 个升序链表

LCR 078. 合并 K 个升序链表

使用二分法就可以解决

cpp 复制代码
class Solution {
public:
    ListNode* mergeKLists(vector<ListNode*>& lists) {

        int n = lists.size();

        if(n == 0){
            return nullptr;
        }
        ListNode* ans ;

        ans = binMerge(lists,0,n-1);
        return ans;
    }

    ListNode* binMerge(vector<ListNode*> &lists,int l,int r ){
        //cout<<l<<" "<<r<<endl;
        if(l > r){
            return nullptr;
        }
        if(l == r){
            return lists[l] ;
        }
        int mid = (l+r)/2;
        ListNode* ll = binMerge(lists,l,mid);
        ListNode* rr = binMerge(lists,mid+1,r);

        return mergeListTwo(ll,rr);
    }

    ListNode* mergeListTwo(ListNode* l, ListNode* r){
        
        ListNode* dummy = new ListNode(0);
        ListNode* h = dummy;
        while(l && r){
            if(l->val > r->val){
                h->next = r;
                r = r->next;
            }else{
                h->next = l;
                l = l->next;
            }
            h = h->next;
        }
        if(l){
            h->next = l;
        }
        if(r){
            h->next = r;
        }
        return dummy->next;
    }
};
相关推荐
sin_hielo6 小时前
leetcode 955
数据结构·算法·leetcode
一起养小猫6 小时前
LeetCode100天Day4-盛最多水的容器与两数之和II
java·数据结构·算法·leetcode
Swift社区7 小时前
LeetCode 453 - 最小操作次数使数组元素相等
算法·leetcode·职场和发展
小李小李快乐不已7 小时前
二叉树理论基础
数据结构·c++·算法·leetcode
程序员三明治7 小时前
【动态规划】01背包与完全背包问题详解,LeetCode零钱兑换II秒解,轻松解力扣
算法·leetcode·动态规划·java后端·01背包·完全背包·零钱兑换
Learner__Q17 小时前
每天五分钟:滑动窗口-LeetCode高频题解析_day3
python·算法·leetcode
阿昭L17 小时前
leetcode链表相交
算法·leetcode·链表
小南家的青蛙19 小时前
LeetCode第1261题 - 在受污染的二叉树中查找元素
算法·leetcode·职场和发展
玖剹19 小时前
记忆化搜索题目(二)
c语言·c++·算法·leetcode·深度优先·剪枝·深度优先遍历
Jul1en_20 小时前
【算法】分治-归并类题目
java·算法·leetcode·排序算法