2016-04-26 83 views
-1

说我有以下排序后的数组中的任意位置存在:检查如果2维阵列的行另一个阵列

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

如何检查如果满足以下的2维阵列中存在长度为3的numbers任何子阵列:

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

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

+0

三个项目组中允许的最大数量是多少? – dasblinkenlight

+0

我还不完全确定。它不会很高,大概<10。现在只允许数字0-3包含 – KOB

+0

'Arrays.asList(outer).containsAll(Arrays.asList(inner))'http:// stackoverflow.com/questions/16524709/finding-if-an-array-contains-all-elements-in-another-array – tak3shi

回答

0

如果只允许少于十个数字,则最多有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 + 10 * S + S 号,以及1001个元素的数组中查找。如果你得到-1,序列就不存在;否则,您将获得所需子序列的起始索引。