两个空间的空间复杂性

时间:2016-06-09 08:33:44

标签: java algorithm space-complexity

我写了两段代码:

public static int[] twoSums0(int[] nums, int target){

    for(int i=0;i<nums.length;i++){
        for(int j=i+1;j<nums.length;j++){
            if(nums[i] == target-nums[j]){
                return new int[]{i,j};
            }
        }
    }
    throw new IllegalArgumentException("No solution");
}

我只是想知道,为什么空间复杂度为O(1)? 为什么当我们使用散列图时,它变成O(n)?

时间复杂度很容易理解,但我没有得到空间复杂性。

1 个答案:

答案 0 :(得分:3)

要计算空间复杂度,您必须分析方法创建的所有对象和基元的渐近大小。您没有包含输入的大小。

此方法最多创建一个包含2个元素的数组(除了用于循环索引的2个基元之外)。因此,它需要恒定的空间(即O(1)空间复杂度。)

如果您使用HashMap来提高此方法的时间复杂度,我假设您将输入数组的所有元素添加到HashMap,其中将需要O(n)空格。