这不是一个家庭作业,这是我在一个没有答案的网站上读过的面试问题。我只是在验证我的解决方案。
问题:
给定矩阵0和1的排序顺序。设计一个算法来返回最大数为1的行索引。之后,他修改了一些问题,即某些行按递增顺序排序,有些行按递减顺序排序。
我正在考虑为每一行应用二进制搜索,这将导致O(Rows * LogRows),但是对于那些的计数,这将再次导致另一次迭代,我正在考虑减少计时,将我正在迭代的那些添加到哈希映射或字典中,然后在保存一些数字之后,我再次迭代以查找最大行。
在复杂性方面是否存在更快的解决方案,或者我的方法存在缺陷?
答案 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)})