假设n * n数组A的每一行由1和0组成,这样在A的任何一行中,所有1都在该行的任何0之前。假设A已经在内存中,描述一个在O(n)时间内运行的方法,用于查找包含最多1的A的行。
答案 0 :(得分:2)
0
行开始,从右向左扫描以遇到第1行当您到达1
时,请更新您的回答。假设该列为j
。
现在,从i
到1
的每一行n
,检查j
列是否包含1。
1
,则表示也可以1
。因此,请向右移动,直到找到最右边的1
并更新答案并j
对于c * n
为某个小常数的所有行,此算法将扫描最多c
个元素。所以时间复杂度为O(n)
。
此外,您可以使用二进制搜索来查找每行需要较少扫描的最右侧1
。首先,似乎每行的二进制搜索将采用O(nlogn)
,但左边界将在每行中减少,从而减少扫描。
希望它有所帮助!