Space 两个总和的复杂性
Space complexity in two sums
我写了一段两和的代码:
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");
}
我只想知道,为什么 space 复杂度是 O(1)?
为什么当我们使用 hashmap 时,它变成了 O(n)?
时间复杂度很容易理解,但我不明白 space 复杂度。
要计算 space 复杂度,您必须分析您的方法创建的所有对象和基元的渐近大小。您不包括输入的大小。
此方法最多创建一个包含 2 个元素的数组(除了用于循环索引的 2 个基元之外)。因此它需要常数 space(即 O(1)
space 复杂度)。
如果您要使用 HashMap
来提高此方法的时间复杂度,我假设您会将输入数组的所有元素添加到 HashMap
,这将需要O(n)
space.
我写了一段两和的代码:
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");
}
我只想知道,为什么 space 复杂度是 O(1)? 为什么当我们使用 hashmap 时,它变成了 O(n)?
时间复杂度很容易理解,但我不明白 space 复杂度。
要计算 space 复杂度,您必须分析您的方法创建的所有对象和基元的渐近大小。您不包括输入的大小。
此方法最多创建一个包含 2 个元素的数组(除了用于循环索引的 2 个基元之外)。因此它需要常数 space(即 O(1)
space 复杂度)。
如果您要使用 HashMap
来提高此方法的时间复杂度,我假设您会将输入数组的所有元素添加到 HashMap
,这将需要O(n)
space.