我写了两段代码:
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)?
时间复杂度很容易理解,但我没有得到空间复杂性。
答案 0 :(得分:3)
要计算空间复杂度,您必须分析方法创建的所有对象和基元的渐近大小。您没有包含输入的大小。
此方法最多创建一个包含2个元素的数组(除了用于循环索引的2个基元之外)。因此,它需要恒定的空间(即O(1)
空间复杂度。)
如果您使用HashMap
来提高此方法的时间复杂度,我假设您将输入数组的所有元素添加到HashMap
,其中将需要O(n)
空格。