无法了解该算法的空间复杂性?

问题描述

我无法理解https://leetcode.com/problems/merge-intervals/solution/问题解决方案的空间复杂性。

class Solution:
    def merge(self,intervals: List[List[int]]) -> List[List[int]]:

        intervals.sort(key=lambda x: x[0])

        merged = []
        for interval in intervals:
            # if the list of merged intervals is empty or if the current
            # interval does not overlap with the prevIoUs,simply append it.
            if not merged or merged[-1][1] < interval[0]:
                merged.append(interval)
            else:
            # otherwise,there is overlap,so we merge the current and prevIoUs
            # intervals.
                merged[-1][1] = max(merged[-1][1],interval[1])

        return merged

在合并的第六行= []中,数据将添加到此列表中(取决于测试用例中给定列表的大小)。那么为什么说空间复杂度是o(1)而不是o(n)。我是新来的。

解决方法

如果您查看解决方案的说明,则会在底部看到:

空间复杂度:O(1)或O(n)

这意味着在最佳情况下O(1),即所有间隔合并为一个间隔的情况,例如

intervals_list = [[1,3],[2,5],[4,8],[6,10]]

所有这些都可以合并为单个间隔[1,10]

所以在这种情况下,空间是恒定的。

现在让我们进入最坏的情况场景,其中空间复杂度将为O(n)

intervals_list = [[1,[5,[9,11],[13,17]]

这些间隔都不能合并,因此存储在merged中的最终结果将与intervals_list完全相同,即与输入的大小相同,因此O(n)的复杂性