例如,我们得到了一个增加排序的多维数组:
int[][] mat = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16}};
如何使用二分查找来查找特定号码?假设我正在寻找3。
您可以通过将一维索引转换为二维索引来做到这一点。例如,索引0映射到0, 0,但是索引4将映射到1, 0,索引15将映射到3, 3。
0
0, 0
4
1, 0
15
3, 3
这样,您就可以使用标准的二进制搜索算法,并且所有您需要做的就是在需要查找特定索引的值时调用转换函数。
将一维索引转换为二维索引的公式为:
row = floor(index / columns); column = index % columns;
这假设每个数组都已排序,并且在展平时,结果数组也已排序。