矩阵 A 按行和列排序,其中 A[i][j] < A[i][j+1] 和 A[i][j] < A[i+1][j]。附加信息是每行的第一个元素小于前一行的最后一个元素,例如:
⎡1 3 5 17⎤
⎢2 4 6 18⎥
⎣7 9 11 20⎦
而且我对这些附加信息在确定 O(lgn) 复杂性中所起的作用感到困惑。
我可以想出 O(m) + O(n) 如下:
int search(int mat[4][4], int n, int x)
{
int i = 0, j = n-1; //set indexes for top right element
while ( i < n && j >= 0 )
{
if ( mat[i][j] == x )
{
printf("\n Found at %d, %d", i, j);
return 1;
}
if ( mat[i][j] > x )
j--;
else // if mat[i][j] < x
i++;
}
printf("\n Element not found");
return 0; // if ( i==n || j== -1 )
}
但我认为我没有使用过信息:每行的第一个元素小于上一行的最后一个元素
谁能给我一些提示?另外,这不是家庭作业。谢谢!