[英]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.