在二维阵列中发现相同的图案
Spot the same patterns in 2D arrays
在一次采访中,我得到了一些二维数组,并被要求识别和计算每个数组中出现的相同模式的值。
模式可以是任何形式。它们可能是正方形、十字,可能有任何重复的形式。
数据看起来像这样:
ArrayOne
[0][1][1][0]
[0][1][1][0]
ArrayTwo
[1][1][0][0]
[0][1][0][0]
[0][1][0][0]
ArrayThree
[0][1]1][0]
[0][1][1][0]
[0][0][0][0]
[0][0][0][0]
人们希望看到的输出是:
ArrayOne ArrayThree - "Two occurrencies"
ArrayTwo ArrayTwo - "One occurency"
就目前而言,我看不出我们如何迭代此类数组以检索它们的模式。当然,我们可以统计每个数组中'1'的个数,但实际上,它没有用,不能回答问题。
非常感谢关于如何在 Java 或任何其他广泛使用的面向对象语言中实现这一目标的建设性建议。
编辑:数组内容已更新以消除原始 post
中存在的混淆
这是任何开始编程课程的典型问题。
方形图案和十字图案可以通过嵌套循环识别。
从索引 0,0 开始扫描矩阵。
首先 [1] 发生将索引保存为起始索引并按所需方向移动矩阵的其余部分(注意不要超过矩阵的最大大小)。
典型square/rectangle识别模式
x---->|
^ |
| v
|<-----
您也可以查看是否已填满。
类似地,对于交叉模式,直线增加行和列索引。
They may be squares, crosses
在我看来,"pattern" 的定义是一组相连的非零单元格。对角线是否被认为是相连的还有待商榷,但对于正方形和十字形则不需要。
现在将所有这些图案收集到一个 Set
二维数组中。例如。请参阅 Find the number of islands 了解如何查找模式。
示例:
1 1 1 1 0
0 1 0 0 0
1 1 0 1 1
1 0 0 1 0
包含 2 个模式:
1 1 1 1 1 1
0 1 0 0 1 0
1 1 0 0
1 0 0 0
为每个输入数组构建一个 Set
模式,然后查看这些集合是否具有共同模式。
或者如果你有很多输入数组,构建一个 Map<Pattern, List<String>>
,其中 Pattern
是一个 class 包装二维数组并实现 equals()
和 hashCode()
,String
是输入数组的名称。
在一次采访中,我得到了一些二维数组,并被要求识别和计算每个数组中出现的相同模式的值。
模式可以是任何形式。它们可能是正方形、十字,可能有任何重复的形式。
数据看起来像这样:
ArrayOne
[0][1][1][0]
[0][1][1][0]
ArrayTwo
[1][1][0][0]
[0][1][0][0]
[0][1][0][0]
ArrayThree
[0][1]1][0]
[0][1][1][0]
[0][0][0][0]
[0][0][0][0]
人们希望看到的输出是:
ArrayOne ArrayThree - "Two occurrencies"
ArrayTwo ArrayTwo - "One occurency"
就目前而言,我看不出我们如何迭代此类数组以检索它们的模式。当然,我们可以统计每个数组中'1'的个数,但实际上,它没有用,不能回答问题。
非常感谢关于如何在 Java 或任何其他广泛使用的面向对象语言中实现这一目标的建设性建议。
编辑:数组内容已更新以消除原始 post
中存在的混淆这是任何开始编程课程的典型问题。
方形图案和十字图案可以通过嵌套循环识别。
从索引 0,0 开始扫描矩阵。 首先 [1] 发生将索引保存为起始索引并按所需方向移动矩阵的其余部分(注意不要超过矩阵的最大大小)。
典型square/rectangle识别模式
x---->|
^ |
| v
|<-----
您也可以查看是否已填满。 类似地,对于交叉模式,直线增加行和列索引。
They may be squares, crosses
在我看来,"pattern" 的定义是一组相连的非零单元格。对角线是否被认为是相连的还有待商榷,但对于正方形和十字形则不需要。
现在将所有这些图案收集到一个 Set
二维数组中。例如。请参阅 Find the number of islands 了解如何查找模式。
示例:
1 1 1 1 0
0 1 0 0 0
1 1 0 1 1
1 0 0 1 0
包含 2 个模式:
1 1 1 1 1 1
0 1 0 0 1 0
1 1 0 0
1 0 0 0
为每个输入数组构建一个 Set
模式,然后查看这些集合是否具有共同模式。
或者如果你有很多输入数组,构建一个 Map<Pattern, List<String>>
,其中 Pattern
是一个 class 包装二维数组并实现 equals()
和 hashCode()
,String
是输入数组的名称。