算法题

作者: 疯子一样男人 | 来源:发表于2021-10-01 08:37 被阅读0次

    第一题:逆波兰表达式

    来源https://blog.csdn.net/qq_36237037/article/details/106629009

    第二题.题目描述

    来源https://blog.csdn.net/qq_36237037/article/details/106644664

    合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

    一 思路一 最笨方法

    将所有节点添加到一个数组中 

    对数组中的节点从小到大进行排序

    从数组中从小到大依次取出节点,串成链表

    二 思路二 逐一比较

    第一步:找到所有链表中的最小的一个结点

    把这个结点赋值给创建的链表的head,然后再把最小的链表的下一个结点赋值给这个链表,然后有一个while循环,直到所有链表 不满足条件,不赋值为止,跳出循环。

    /// 方法二 逐一比较

    - (LinkNode *)mergeManyLists2:(NSMutableArray<LinkNode *> *)linkNodes {

        if (linkNodes == nil || linkNodes.count == 0) {

            return nil;

        }

        LinkNode *head = [[LinkNode alloc] init];

        LinkNode *cur = head;

        while (true) {

            int minIndex = -1;

            for (int i = 0; i < linkNodes.count; i++) {

                if (linkNodes[i] == nil || linkNodes[i].element == nil) {

                    continue;

                }

                if (minIndex == -1 || linkNodes[i].value < linkNodes[minIndex].value) {

                    minIndex = i;

                }

            }

            if (minIndex  == -1) {

                break;

            }

            cur = cur.next = linkNodes[minIndex];

            linkNodes[minIndex] = linkNodes[minIndex].next;

        }

        return head.next;

    }

    方法三递归有点问题应该使用

    因为递归的时间复杂度是2的n次方,上面的方式是kn

    第一种时间复杂度是O(nlogn)

    空间复杂度是:O(n)

    第二种时间复杂度是O(kn)

    第三种时间复杂度是:O(kn)

    第四种时间复杂度是:O(nLogk)

    空间复杂度是O(k)

    第五种时间复杂度是O(nlogk)

    相关文章

      网友评论

          本文标题:算法题

          本文链接:https://www.haomeiwen.com/subject/ppfynltx.html