2D矩阵中的二进制搜索

时间:2014-04-15 07:53:49

标签: c++ algorithm matrix

这不是一个家庭作业,这是我在一个没有答案的网站上读过的面试问题。我只是在验证我的解决方案。

问题:

给定矩阵0和1的排序顺序。设计一个算法来返回最大数为1的行索引。之后,他修改了一些问题,即某些行按递增顺序排序,有些行按递减顺序排序。

我正在考虑为每一行应用二进制搜索,这将导致O(Rows * LogRows),但是对于那些的计数,这将再次导致另一次迭代,我正在考虑减少计时,将我正在迭代的那些添加到哈希映射或字典中,然后在保存一些数字之后,我再次迭代以查找最大行。

在复杂性方面是否存在更快的解决方案,或者我的方法存在缺陷?

1 个答案:

答案 0 :(得分:2)

为什么一旦获得第一个(升序)或第一个零(降序)的索引,你需要计算一个?确定一行是降序还是升序可以在一个操作中完成 - 比较第一个和最后一个元素。

高级伪代码:

maxRow <- -1
maxOnes <- -infinity
For each row:
  check if row is ascending or descending
  do a binary search for the first 0 (if descending) or first 1 (if ascending)
  use the above calculated index, and the length of the row to find number of ones in this row
  if number of ones is more than maxOnes:
     modify maxRow and maxOnes with the values of this line
return maxRow

这是在O(#rows*log{size(row)})

中完成的