相关疑难解决方法(0)

如何从左到右,从上到下排序的二维数组中搜索数字?

我最近接受了这个面试问题,我很好奇它是一个很好的解决方案.

假设我有一个二维数组,其中数组中的所有数字从左到右,从上到下依次递增.

搜索和确定目标号码是否在阵列中的最佳方法是什么?

现在,我的第一个倾向是利用二进制搜索,因为我的数据已经排序.我可以确定O(log N)时间内的数字是否在一行中.然而,正是这两个方向让我失望.

我认为可能有用的另一种解决方案是从中间的某个地方开始.如果中间值小于我的目标,那么我可以确定它在中间的矩阵的左方形部分.然后我沿着对角线移动并再次检查,减小了目标可能存在的方格的大小,直到我对目标数字进行了磨练.

有没有人有解决这个问题的好主意?

示例数组:

从左到右,从上到下排序.

1  2  4  5  6  
2  3  5  7  8  
4  6  8  9  10  
5  8  9  10 11  
Run Code Online (Sandbox Code Playgroud)

algorithm search multidimensional-array

87
推荐指数
6
解决办法
6万
查看次数

搜索已排序的2D矩阵

M是整数的二维矩阵(nXm),它们在行和列中排序写一个函数搜索(int s),它返回数字或Null的确切位置.最有效的方法是什么?

sorting algorithm matrix data-structures

9
推荐指数
1
解决办法
6219
查看次数

子线性时间内的二维数组搜索

今天我在接受采访时被问到以下问题:

给定n×n整数数组,其中不包含从左到右以及从上到下增加的重复项和值,提供一种算法,用于检查给定值是否在数组中.

我提供的答案与此主题中的答案类似:
算法:在二维整数数组中搜索整数的有效方法?

该解决方案是O(2n),我认为这是最佳解决方案.

然而,采访者告诉我,有可能在子线性时间内解决这个问题.我已经绞尽脑汁想要如何做到这一点,但我什么也没想到.

子线性解决方案是否可行,或者这是最佳解决方案?

algorithm

6
推荐指数
1
解决办法
1428
查看次数