[leetcode] (Array101) 1089. Duplicate Zeros

 

Given a fixed-length integer array arr, duplicate each occurrence of zero, shifting the remaining elements to the right.

 

Answer

mine // originArr의 for문 인덱스는 원래 배열의 값을 순차로 읽어야하기 때문에, 순차적으로 증가하여야만 한다. 그런데 arr에 0을 추가로 삽입하며 사용한 i++에 의하여 순차적으로 읽을 수 없게 되며 실패했다.

class Solution {
    public void duplicateZeros(int[] arr) {
        
        // create array
        int[] originArr = new int[arr.length];
        // copy
        originArr = arr;
        
        for (int i = 0; i < arr.length; i++) {
            
            arr[i] = originArr[i]; 
            
            // duplicate 0
            if (originArr[i] == 0 && i < originArr.length - 1) {
                arr[i+1] = 0;
                i++;
            }
        }
        
    }
}

 

leetcode Answer https://leetcode.com/problems/duplicate-zeros/editorial

https://leetcode.com/problems/duplicate-zeros/solutions/4094396/two-simple-java-solutions

class Solution {
    public void duplicateZeros(int[] arr) {
        int length = arr.length;
        int zeros = 0;

        for (int i = 0; i < length; i++) {
            if (arr[i] == 0) {
                zeros++;
            }
        }

        int lastIndex = length - 1;
        int newIndex = length - 1 + zeros;

        while (lastIndex >= 0) {
            if (newIndex < length) {
                arr[newIndex] = arr[lastIndex];
            }

            if (arr[lastIndex] == 0) {
                newIndex--;

                if (newIndex < length) {
                    arr[newIndex] = 0;
                }
            }

            lastIndex--;
            newIndex--;
        }
    }
}