0

我有一个字节数组包含一些由 7 分隔的字节,我想拆分这些字节,然后修剪分隔的字节。ie-14 必须从分离的字节数组的左右删除。

例子:

输入:{-14, 2, 54, 23, -14, 7, 5, 73, 12, -14, -14, 7}
输出:{2, 54, 23} , {5, 73, 12}

输入:{34, 64, 23, -14, 43, -14, 7, 7, 42, 2, -14}
输出:{34, 64, 23, -14, 43} , {42, 2}

编辑
应该删除空数组。例如,如果 7 在输入数组的第一个或末尾,则应将其删除。

更多示例:

输入:{7, 34,21,7}
输出:{34,21}

输入:{-14,-14,7,7,34,21,-14, 7,-14}
输出:{34, 21}

结束编辑

4

1 回答 1

0

只需遍历数组,维护一个left指示最后一次拆分位置的索引。当您遇到拆分位置或数组末尾时,您会使用第二个索引right来表示该位置。现在增加left和减少right以修剪序列。然后创建表示的子序列的副本。

int left = 0, right, pos;
for (pos = 0; pos <= a.length; ++pos) {
  if (pos < a.length && a[pos] != 7)
    continue; // no need to split, so simply go on
  for (right = pos; right != left; --right) // drop trailing -14s
    if (a[right - 1] != -14)
      break;
  // "right" now is one past the last element we want to keep
  for (; left != right; ++left) // drop leading -14s
    if (a[left] != -14)
      break;
  if (left != right) {
    byte[] b = new int[right - left];
    System.arraycopy(a, left, b, 0, right - left);
    res.add(b);
  }
  left = pos + 1;
}
于 2012-11-15T07:43:09.967 回答