从数组中删除所有零

18

我有一个数组:

[0, 5, 6, 0, 0, 2, 5]
我想将其中所有的零删除,以便返回以下结果(保持相同顺序):
[5, 6, 2, 5]

有没有比下面更简单的方法来删除所有零?

int[] array = {0, 5, 6, 0, 0, 2, 5};
        int len = 0;
        for (int i=0; i<array.length; i++){
            if (array[i] != 0)
                len++;
        }
        int [] newArray = new int[len];
        for (int i=0, j=0; i<array.length; i++){
            if (array[i] != 0) {
                newArray[j] = array[i];
                j++;
            }
        }

我找不到Arrays类中的任何方法,Google/SO搜索也没有给我好的答案。


6
避免在一开始就添加它们是最简单的解决方案。 - Peter Lawrey
1
你需要一个新的长度不同的数组,因此你仍然需要进行复制。使用集合将节省你需要提前找到最终大小的步骤。 - Thorbjørn Ravn Andersen
我的情况是:数组是一个游戏的棋盘。当一个或多个洞中不存在“物品”时,有许多可能性。因此,零将存在那里,这就是我在问的原因... - Hidde
如果可以避免添加零,Peter建议一开始就避免添加零是最好的方法。在无法避免添加零的情况下,例如客户端输出等情况下,您的算法是最优的。 - Zéychin
2
这个特定的问题是在 Java 中,那就是为什么我要用 Java 标签来询问它。 - Hidde
显示剩余2条评论
11个回答

0
public class RemoveZeros {
    public static void main(String[] args) {
        int arr[] = {1,0,0,1,0,0,1,0,0,0,0,1,2,0,5};
        int n = arr.length;
        for(int i=0; i<n; i++) {
            if(arr[i]!=0) {
                System.out.print(arr[i]+ " ");
            }
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接