【问题标题】:2d Array contains other 2d Array二维数组包含其他二维数组
【发布时间】:2015-09-10 10:05:28
【问题描述】:

找出二维数组包含任何其他二维数组的最佳解决方案是什么? 例如:

char a[][]={{'a','b'}, {'b','a'}}
char b[][]={{'a','b'}, {'b','a'}, {'a','b'}, {'a','b'}, {'a','b'}, {'b','a'}}

那么答案应该是 2,因为 b 包含 2 次。

【问题讨论】:

  • 这些数组的结果应该是什么? char a[][]={{'1','2'}, {'1','2'}}; char b[][]={{'1','2'}, {'1','2'}, {'1','2'}}
  • 那么答案应该是 2。
  • @RealSkeptic 我不知道如何继续。任何有用的信息都会有所帮助。
  • @RajatSharma 两个数组的维度是固定的吗?

标签: java arrays multidimensional-array


【解决方案1】:

我在这里写一个蛮力解决方案:

想法:

从矩阵的左上角(0,0) 开始,您要在其中找到另一个二维数组。

逐行匹配较大矩阵和较小矩阵的条目,如果所有行的所有条目都匹配,则已找到二维数组。如果任何行的任何条目不匹配,则转到下一个二维子数组。

下一个二维子数组将从 (0,1) 开始。

我们这样做直到没有更多的子数组需要检查。

class Twodarray
{
 public static void main(String []args)
 {
  char a[][]={{'a','b'}, {'b','a'}};
  char b[][]={{'a','b','c'}, {'b','a','d'}, {'a','b','a'}, {'a','b','b'}, {'a','b','a'}, {'b','a','a'}};
  int c=number_of_2d_arrays(b,a);
  System.out.println(c);
 }
  public static int number_of_2d_arrays(char [][]arr1,char [][]arr2)
    {
     int i=0,j=0,c=0;
     while(true)
     {
      int row=i,col=j;      
      if(arr2.length>arr1.length-row)
      {
       break;
      }
      else if(arr2[0].length>arr1[0].length-col&&col==0)
      {break;}
      else if(arr2[0].length>arr1[0].length-col)
      {++i;j=0;}
      else
      {
       boolean matches=true;
       for(int a=0;a<arr2.length;++a)
       {col=j;
        for(int b=0;b<arr2[0].length;++b)
        {         
         if(arr1[row][col++]!=arr2[a][b])
         {matches=false;break;}
        }    

        if(!matches)
         break;
        ++row;
       }       
       if(matches)
        {++c;}
       ++j;
      }
     }
    return c;
    }
}

【讨论】:

  • 非常感谢你..你是一个救生员:)
猜你喜欢
  • 1970-01-01
  • 2021-04-28
  • 2013-09-06
  • 2016-11-05
  • 1970-01-01
  • 2021-11-26
  • 2019-10-09
  • 2019-01-23
  • 2017-01-19
相关资源
最近更新 更多