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

合并k个已排序的链表

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

桶排序YYDS
给的限制条件中,k和n都比较大,val大小被限制,时间限制比较严格,空间几乎无限,直接用空间换时间的方法,通过桶排序解决问题

第一步统计每个数值的个数,这里使用Map,统计很方便,还有自动排序的功能
ListNode *head, *temp, *cur;
head = nullptr;
map<int,int> m = {};
for (int i = 0;i < lists.size();i++){   
    for (temp = lists[i];temp != nullptr;temp=temp->next){
        if (m.find(temp->val) != m.end()){
            m[temp->val] += 1;
     }
     else{
         m.insert(pair<int,int>(temp->val,1));
     }
    }
}
第二步处理下特殊情况
if (m.size() == 0){
    return head;
}
第三步按照顺序新建ListNode输出就完事了,如果想要进一步提高性能,可以把while循环改成for循环便利map,这样就不用erase操作了
这里我新建了一个额外的节点避免在循环中给head赋值,减少判断的次数
head = new ListNode(100);
cur = head;
while(m.size() != 0){
    int num = m.begin()->second,val = m.begin()->first;
    for (int i = 0;i < num;i++){
        temp = new ListNode(val);
        cur->next = temp;
        cur = temp;
        }
    m.erase(val);
}
head = head->next;
return head;











全部评论

相关推荐

想干测开的tomca...:这份简历是“大一新生硬凹资深后端”的典型反面教材,槽点离谱到能让面试官直接笑出声: ### 1. 「年龄+入学时间」和项目复杂度完全脱节,可信度直接归0 你2024年7月才入学(现在刚读了1年多),19岁的大一新生,能把Vue3+Spring Boot+ShardingSphere+K8s+AI这些技术全塞进两个项目里?别说实际开发,光把这些技术的文档看完都得半年——这不是“能力强”,是“把招聘JD里的技术词全抄过来造假”,明摆着没碰过实际代码
点赞 评论 收藏
分享
牛客60022193...:大厂都招前端,他们觉得AI能替代前端,可能他们公司吊打btaj吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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