Java 返回数组列表的算法的空间复杂度是多少?
我在分析一个螺旋矩阵。该解决方案要求输入矩阵并返回数组列表。这是选择的解决方案:Java 返回数组列表的算法的空间复杂度是多少?,java,algorithm,data-structures,big-o,space-complexity,Java,Algorithm,Data Structures,Big O,Space Complexity,我在分析一个螺旋矩阵。该解决方案要求输入矩阵并返回数组列表。这是选择的解决方案: class Solution { public List < Integer > spiralOrder(int[][] matrix) { List ans = new ArrayList(); if (matrix.length == 0) return ans; int r1 = 0, r2 = matrix.length - 1; int c1 =
class Solution {
public List < Integer > spiralOrder(int[][] matrix) {
List ans = new ArrayList();
if (matrix.length == 0)
return ans;
int r1 = 0, r2 = matrix.length - 1;
int c1 = 0, c2 = matrix[0].length - 1;
while (r1 <= r2 && c1 <= c2) {
for (int c = c1; c <= c2; c++) ans.add(matrix[r1][c]);
for (int r = r1 + 1; r <= r2; r++) ans.add(matrix[r][c2]);
if (r1 < r2 && c1 < c2) {
for (int c = c2 - 1; c > c1; c--) ans.add(matrix[r2][c]);
for (int r = r2; r > r1; r--) ans.add(matrix[r][c1]);
}
r1++;
r2--;
c1++;
c2--;
}
return ans;
}
}
我在这里查阅了空间复杂性,但我不知道如何将这些信息应用到这个案例中
我已经看了评论的讨论部分
有人说它在空间上,因为解决方案创建了一个数组列表
有人说它是O1空间,因为这个问题需要返回数组列表。所以这个空间已经被考虑进去了
哪个是正确的?O1表示此算法所需的内存量不取决于输入的大小。显然不是这样,每次一个内部for循环迭代时,都会向数组列表中添加一个元素。因此,由于该算法有OMN运行时,它也有OMN内存复杂性,其中矩阵的大小为M x N.肯定是开的 由于列表ans的大小取决于矩阵的大小,我们可以说O1不是答案。这是因为O1表示一个恒定的空间,这里的情况并非如此。 列表ans的确切大小为n=宽度*高度,这将允许它包含矩阵中的所有项。 如果我们的矩阵的大小加倍,那么我们的ans的大小也将加倍,因为项目的数量已经加倍。这表明矩阵的大小和ans之间存在线性关系。我们可以说我们的空间是复杂的。