在O(log m + log n)时间内搜索2d排序数组中的元素?

时间:2012-04-03 08:37:19

标签: c++ algorithm

我在接受采访时被问到这个问题。在采访之后我做了很多谷歌,但我仍然无法得到明确的解决方案。有人可以告诉我如何使用他提到的函数签名返回(row,col)对(是!返回两个值)。

void find(int A[][10], int m, int n, int target, int& row, int& col)

2 个答案:

答案 0 :(得分:2)

您的问题标题与实际问题的不同。所以不确定您是否需要搜索方法或如何从该函数签名返回值。 因此,不确定您需要什么以及下面的详细信息是否正确。 因为两个变量row和col是references.justdo搜索并填充函数内的值。然后你可以在你调用的地方使用这两个引用。 例如: 如果您从其他任何地方调用以下函数:

find( dptr, 5,  19, 5, i,j);

i和j将填充在函数内部。您可以在调用后使用它们。这意味着从函数返回两个值。

答案 1 :(得分:1)

我猜测矩阵是这样排序的:

1 2 3
4 5 6
7 8 9

应用二进制搜索两次,例如查找元素5:

  • 找到第一个col< = 5和second col> = 5
  • 的行
  • 在该行中,找到元素5

二进制搜索只是在中间选择元素的方法。如果它太大,请选择上半场,否则选择下半场。重复,直到找到您要查找的元素。