获取基于条件的向量索引位置

时间:2015-02-25 14:01:48

标签: java algorithm vector

我们说我有矢量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}}

1 个答案:

答案 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