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

时间:2016-04-26 11:08:25

标签: java arrays multidimensional-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将始终排序。

1 个答案:

答案 0 :(得分:0)

如果只允许小于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,序列不存在;否则,您将获得所需子序列的起始索引。