可以在O(n)时间内为某些输出处理二维数组的元素吗?

时间:2017-04-02 16:07:23

标签: arrays algorithm big-o

假设n * n数组A的每一行由1和0组成,这样在A的任何一行中,所有1都在该行的任何0之前。假设A已经在内存中,描述一个在O(n)时间内运行的方法,用于查找包含最多1的A的行。

1 个答案:

答案 0 :(得分:2)

  1. 0行开始,从右向左扫描以遇到第1行
  2. 当您到达1时,请更新您的回答。假设该列为j

  3. 现在,从i1的每一行n,检查j列是否包含1。

    • 如果它保持1,则表示也可以1。因此,请向右移动,直到找到最右边的1并更新答案并j
    • 如果它为0,我们将不需要向左或向右,因为我们已经从之前的行中获得了更好的结果。
  4. 对于c * n为某个小常数的所有行,此算法将扫描最多c个元素。所以时间复杂度为O(n)

    此外,您可以使用二进制搜索来查找每行需要较少扫描的最右侧1。首先,似乎每行的二进制搜索将采用O(nlogn),但左边界将在每行中减少,从而减少扫描。

    希望它有所帮助!