说我有以下排序数组:
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
将始终排序。
答案 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,序列不存在;否则,您将获得所需子序列的起始索引。