【发布时间】:2017-09-17 20:15:11
【问题描述】:
我正在编写函数来检查给定值是否包含在 .该矩阵具有以下性质: • 每行中的整数从左到右升序排序。 •每列中的整数从上到下按升序排序
public static boolean searchMatrix(int target, int[][] matrix)
{
for(int i = 0;i <= matrix[0].length;i++)
{
for (int j=i; j<matrix.length;j++)
{
if(target == matrix[i][j])
return true;
}
}
return false;
}
我想知道这个程序的时间复杂度为 O(N)。 如果不是,我应该进行哪些更改才能进入 O(N)。
【问题讨论】:
-
一般情况下,如果循环内的语句为
O(1),则1个循环为O(n),2个循环嵌套1个为O(n^2)或O(n*m)。 -
假设这个post 会帮助你更清楚地理解时间复杂度的概念。
-
@SpencerWieczorek 只是好奇地问.. 给定的矩阵已经是二维数组,这意味着
n is the size of the double array row*column所以即使使用嵌套循环也不会是O(n),因为循环会循环n时间? -
在最坏的情况下,嵌套循环将在 matrix[i] 中的每个元素完整运行一次,因此假设方阵为 O(N^2)。
-
@Luminous_Dev 这完全取决于您如何定义
N是什么,但通常您希望它是线性扩展的。声明N=row*col意味着虽然您可以声明它是O(N),但它与矩阵行和列的大小不一致。
标签: java arrays time-complexity