Arrays 二维数组的元素能否在O(n)时间内处理一些输出?

Arrays 二维数组的元素能否在O(n)时间内处理一些输出?,arrays,algorithm,big-o,Arrays,Algorithm,Big O,假设n*n数组A的每一行都由1和0组成,这样,在A的任何一行中,所有1都位于该行中任何0的前面。假设A已经在内存中,描述一个在O(n)时间内运行的方法,用于查找A中包含最多1的行 从第0行开始,从右到左扫描以遇到第一个1 当您到达1时,更新您的答案。假设该列为j 现在,对于从1到n的每一行i,检查j第列是否保留1 如果按住1,则表示右侧也可以有1。因此,尝试向右移动,直到找到最右边的1,并更新答案和j 如果它为0,则不需要向左或向右移动,因为前面的行已经有了更好的结果 此算法将扫描所有行的a

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

  • 从第
    0
    行开始,从右到左扫描以遇到第一个1
  • 当您到达
    1
    时,更新您的答案。假设该列为
    j

  • 现在,对于从
    1
    n
    的每一行
    i
    ,检查
    j
    第列是否保留1

    • 如果按住
      1
      ,则表示右侧也可以有
      1
      。因此,尝试向右移动,直到找到最右边的
      1
      ,并更新答案和
      j
    • 如果它为0,则不需要向左或向右移动,因为前面的行已经有了更好的结果
  • 此算法将扫描所有行的atmost
    c*n
    元素,其中
    c
    是一些小常量。所以时间复杂度是
    O(n)

    此外,您可以使用二进制搜索为需要较少扫描的每一行查找最右边的
    1
    。起初,每行上的二进制搜索似乎需要
    O(nlogn)
    ,但每行中的左边界将减少,从而减少扫描


    希望有帮助

    你的想法呢?你能详细说明一下O(NlogN)的方法吗?对不起,stackoverflow不是一个你提问并得到明智答案的甲骨文。解释您尝试了什么以及在哪里遇到了问题。此代码使用单循环结构,但在块i*j次时执行:#include int search(int mat[4][4]){int i=0,j=0,temp,highest,rowNo;而(i<4){if(mat[i][j]=1){temp++}if(这是家庭作业吗?在评论中很难阅读代码。你能编辑一个问题并添加格式化代码吗?(或者对新手是禁止的?)次要挑剔:访问的元素总数不是
    n
    ,更像是在最坏的情况下
    3n
    (或
    2n
    如果我们看列
    j+1
    而不是列
    j
    ),例如,在由
    1111…1110
    行组成的矩阵上。除此之外,回答很好。嗨@Gassa,我明白了。谢谢,我已经大致更新了我的答案。