繁体   English   中英

检查二维数组的一行是否存在于另一个数组中的任何位置

[英]Checking if a row of a 2-dimensional array exists anywhere within another array

假设我有以下排序数组:

int[] numbers = {0, 0, 1, 2, 2, 2}

如何检查以下二维数组中是否存在任何长度为 3 的numbers子数组:

int[][] sets = { {0, 0, 0}, {1, 1, 1}, {2, 2, 2} }

在这个简单的例子中, numbers的最后 3 个元素显然作为数组包含在sets ,但在我的实际程序中, sets将有更多数字的 3 位排列,但它们都将保持长度为 3,并且numbers将始终进行排序。

如果只允许小于 10 的数字,则最多有 1000 个可能的三个数字序列。 将它们编码为 100*a i +10*a i+1 +a i+2 ,并将第一个此类序列的索引存储在 1001 个元素的数组中。

在你的情况下, numbers将被翻译成

0, 0, 1, 2, 2, 2

  1 - 0
 12 - 1
122 - 2
222 - 3

第一列是 1001 个元素数组的索引; 第二列是放置在该索引处的值。 1001 个元素数组的其余位置设置为 -1。

要查看numbers包含三元素序列,请从中构造 100*s 0 +10*s 1 +s 2数字,并在 1001 元素数组中查找。 如果得到 -1,则序列不存在; 否则,您将获得所需子序列的起始索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM