我有一个字节数组包含一些由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}
结束编辑
答案 0 :(得分: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;
}