我们说我有矢量vals
和数字n
:
boolean[] vals = new boolean[]{false, true, true, false, false,
true, false, true, true};
int n = 2;
我需要定义向量vals
是否有n
个连续节点等于true
。如果有,那么我想得到这些节点的索引位置。例如,在上面给出的例子中,答案是:
{{1,2},{7,8}}
答案 0 :(得分:2)
这是一种方法。
public static int[][] subSeqs(boolean[] vals, int n) {
List<int[]> result = new ArrayList<>();
int i = -1;
for (int j = 0; j <= vals.length; j++) {
boolean b = j == vals.length ? false : vals[j];
if (b && i == -1) { // going from false to true
i = j;
} else if (!b && i != -1) { // going from true to false
if (j-i >= n)
result.add(new int[] { i, j-1 });
i = -1;
}
}
return result.toArray(new int[result.size()][]);
}
基本上i
是在迭代过程中更新的“状态”变量。
i
为-1
时,我们处于false
序列i
为非负数时,它表示当前真实序列中第一个真的索引。因此,当我们从false
切换到true
时,我们将i
设置为当前索引,当我们从true
切换到false
时,我们会检查如果刚完成的true
序列是>= n
。