给出了一个在所有三个维度上排序的 3d 矩阵,我们必须在其中找到一个给定的数字。
对于上述问题,我一直在想:3D 数组arr[m][n][r]
就像一堆矩形,其中每个矩形(考虑arr[m][n][0]
)将最大的元素作为最右边的元素(arr[m-1][n-1][0]
)。我们可以在每个矩形内搜索O(m+n)
:
int row = 0;
int col = N-1;
while (row < M && col >= 0)
{
if (mat[row][col] == elem)
{
return true;
}
else if (mat[row][col] > elem)
{
col--;
}
else
{
row++;
}
}
我在想它可以类似地扩展到第三维,因此使其成为线性复杂度解决方案(O(m+n+r)
)。我对吗 ?
有没有人有任何其他想法?复杂度会是多少?