一尘不染

通过二进制搜索在排序的多维数组中查找数字

algorithm

例如,我们得到了一个增加排序的多维数组:

int[][] mat = {{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16}};

如何使用二分查找来查找特定号码?假设我正在寻找3。


阅读 257

收藏
2020-07-28

共1个答案

一尘不染

您可以通过将一维索引转换为二维索引来做到这一点。例如,索引0映射到0, 0,但是索引4将映射到1, 0,索引15将映射到3, 3

这样,您就可以使用标准的二进制搜索算法,并且所有您需要做的就是在需要查找特定索引的值时调用转换函数。

将一维索引转换为二维索引的公式为:

row = floor(index / columns);
column = index % columns;

这假设每个数组都已排序,并且在展平时,结果数组也已排序。

2020-07-28