2012-11-15 75 views
0

我有一個字節數組包含一些由7分隔的字節,我想拆分這些字節,然後修剪分離的字節。即-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}

END EDIT

+2

-14的特別之處是什麼?在你的第二個例子中,爲什麼你在兩個內容之間沒有空數組? –

+0

@Jon Skeet:空數組應該被刪除。 –

+0

您還沒有提及的其他任何要求?鑑於這是一種不尋常的情況,你應該儘量在描述中詳盡無遺。在輸入開始時7點怎麼樣?還是空的輸入?或者只包含7個輸入? –

回答

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; 
} 
+0

謝謝,它的作品完美。 –