我最近被问到这个面试问题,我很好奇这会是一个什么样的解决方案。
假设给我一个二维数组 数组中的数字正在增加 从左到右,从上到下 底部。
什么是最好的方法来搜索和 确定目标数字是否位于 数组?
现在,我的第一个倾向是利用二进制搜索,因为我的数据是有序的。我可以确定一个数字在 O (logN)时间内是否在一行中。然而,是这两个方向让我迷失了方向。
另一个我认为可行的解决方案是从中间的某个地方开始。如果中间值小于我的目标,那么我可以确定它是在矩阵的左方部分从中间。然后我沿对角线移动并再次检查,减小目标可能位于的正方形的大小,直到我对目标数字进行磨合。
有人对解决这个问题有什么好主意吗?
示例数组:
从左到右,从上到下。
1 2 4 5 6
2 3 5 7 8
4 6 8 9 10
5 8 9 10 11