题解 | #牛群的身高排序# 排序应用题

牛群的身高排序

https://www.nowcoder.com/practice/9ce3d60e478744c09768d1aa256bfdb5

知识点

快速排序 计数排序 链表

思路分析

求的是整个链表的按值排序后的结果,可以把所有的值取出来进行排序后再重新连接为新的链表。在实现上可以建立虚拟头结点简化代码逻辑。

排序可以选择快速排序O(nlogn)或者 计数排序 O(n)

时间复杂度

遍历链表的复杂度为O(n)

排序的复杂度为O(nlogn)或者O(n)

瓶颈在排序上

AC code (C++)

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    ListNode* sortList(ListNode* head) {
        vector<vector<ListNode*>> a(10010);
        auto p = head;
        while (p) {
            a[p->val].push_back(p);
            p = p->next;
        }
        auto dummy = new ListNode(-1);
        p = dummy;
        for (int i = 0; i <= 10000; i ++) {
            for (auto x : a[i]) {
                p->next = x;
                p = p->next;
            }
        }
        p->next = nullptr;
        return dummy->next;
    }
};

全部评论

相关推荐

08-20 11:56
门头沟学院 Java
点赞 评论 收藏
分享
我只是一个小白菜:我还用不惯m4,也是山猪吃不了细糠了
投递字节跳动等公司10个岗位
点赞 评论 收藏
分享
DKS233:(1)专业技能:Java8也太旧了,最少也要了解到JDK17吧,可以参考现在SpringBoot支持的Java最低版本,熟悉mysql基本理论具体指啥,是锁这种具体原理还是分库分表这些业务场景,spring这些专业词汇,大小写要写对(全篇简历都有这个问题,显得不严谨),熟悉使用框架进行业务开发就别写了,如果要写,起码要写到框架原理部分吧,比如aop,启动原理什么的,springcloud具体指哪些模块呢,写清楚,网关还是鉴权还是什么,“改造”没必要写吧,你直接说用springcloud开发的不就行了(2)项目经历:首先格式就有大问题,时间怎么能换行呢,调整一下,响应速度那个,如果指的是将部分数据从其他数据库转到redis的提升就别写了,因为这个不算难点,redis可以写写分布式这些,比如容灾怎么实现的,数据库同步怎么做的
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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