我正在编写一种将n * n矩阵转换为单个数组的算法。
1 2 3
4 5 6
7 8 9
= [1, 2, 3, 4, 5, 6, 7, 8, 9]
如果我做的是O(n 2 )或O(n 3 ),我会感到困惑:
public int[] mergeMatrix(int[][] matrix) {
List<Integer> tempList = new ArrayList<>();
for (int[] array : matrix) {
for (int i : array) {
tempList.add(i);
}
}
int totalLength = tempList.size();
int[] mergedArray = new int[totalLength];
for (int i = 0; i < tempList.size(); i++) {
mergedArray[i] = tempList.get(i);
}
return mergedArray;
}
应该是O(n 2 ),因为这是算法处理过程中最长的最坏情况,还是O(n 3 ),因为O(n) + O(n 2 )= O(n 3 )?
答案 0 :(得分:2)
其运行时复杂度为O(nm),其中n
是行数,m
是矩阵中的列数。
原因:
在n = m
的上下文中,这将是O(n * n)或O(n 2 ),但只有 。>
这里的循环次数并不重要,因为您可以使用它进行花哨的迭代。请确保查看您在循环中实际执行的操作;由于它们是线性的,由于嵌套的性质,我希望运行时是线性运行时乘以线性运行时。