0
我想知道是否有減少二維數組中所有非零元素的行索引的好方法。例如,所有非零元素左移:將二維數組中的所有元素向下移動
[0, 1, 0, 1, 1] =>
[1, 0, 1, 1, 0]
一種簡單的方法來做到這一點顯然是:
for (int[] row : array) {
for (int i = 0; i < row.length - 1; i++) {
row[i] = row[i + 1];
}
row[row.length - 1] = 0;
}
我也能做到這一點是這樣的:
for (int[] row : array) {
System.arraycopy(row, 1, row, 0, row.length - 1);
row[row.length - 1] = 0;
}
的簡單的算法來的所有元素從指數下移:
for (int col = 0; col < arr[0].length; col++) {
for (int row = index; row > 0; row--) {
arr[row][col] = arr[row - 1][col];
}
}
但是,我不能用System.arraycopy
做這個行索引。
現在我想知道的是,是否有更好的方法將元素向下移動而不是循環遍歷整個矩陣?
你打算如何使用它?你可以使用鏈表嗎?你可以使用圓形陣列嗎? –
我正在實施俄羅斯方塊遊戲。當一行被填滿時,它上面的所有行應該下降一級(遊戲區域以二維矩陣表示)。我想我可以將元素存儲在一個'[x] [y]'數組而不是'[y] [x]'中,然後我可以對其執行arraycopy,但是我想我會問偉大的方法表面。 –
你可以有2個這樣的數組,並使用System.arrayCopy從一個到另一個。您仍然可以獲得速度,如果您重新使用陣列,則不會佔用GC。這裏的循環可能對遊戲來說太慢(取決於棋盤大小)。 –