g1001_1100.s1089_duplicate_zeros.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g1001_1100.s1089_duplicate_zeros;
// #Easy #Array #Two_Pointers #2022_02_24_Time_2_ms_(67.91%)_Space_46.1_MB_(15.10%)
/**
* 1089 - Duplicate Zeros\.
*
* Easy
*
* Given a fixed-length integer array `arr`, duplicate each occurrence of zero, shifting the remaining elements to the right.
*
* **Note** that elements beyond the length of the original array are not written. Do the above modifications to the input array in place and do not return anything.
*
* **Example 1:**
*
* **Input:** arr = [1,0,2,3,0,4,5,0]
*
* **Output:** [1,0,0,2,3,0,0,4]
*
* **Explanation:** After calling your function, the input array is modified to: [1,0,0,2,3,0,0,4]
*
* **Example 2:**
*
* **Input:** arr = [1,2,3]
*
* **Output:** [1,2,3]
*
* **Explanation:** After calling your function, the input array is modified to: [1,2,3]
*
* **Constraints:**
*
* * 1 <= arr.length <= 104
* * `0 <= arr[i] <= 9`
**/
public class Solution {
public void duplicateZeros(int[] arr) {
int countZero = 0;
for (int k : arr) {
if (k == 0) {
countZero++;
}
}
int len = arr.length + countZero;
// We just need O(1) space if we scan from back
// i point to the original array, j point to the new location
int i = arr.length - 1;
int j = len - 1;
while (i < j) {
// copy twice when hit '0'
if (arr[i] == 0) {
if (j < arr.length) {
arr[j] = arr[i];
}
j--;
}
if (j < arr.length) {
arr[j] = arr[i];
}
i--;
j--;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy