Duplicate Zeros

    public void duplicateZeros(int[] arr) {
        int countZeros = Arrays.stream(arr).filter(i -> i == 0).map(i -> 1).sum();
        int len = arr.length + countZeros;
        int i = arr.length - 1;
        int j = len - 1;
        while (i < j) {
            if (arr[i] != 0) {
                if (j < arr.length) {
                    arr[j] = arr[i];
                }
            } else {
                // Copy zero twice
                if (j < arr.length) {
                    arr[j] = arr[i];
                }
                j--;
                if (j < arr.length) {
                    arr[j] = arr[i];
                }
            }
            i--;
            j--;
        }
    }

Last updated