Solving Leetcode Interviews in Seconds with AI: Duplicate Zeros
Introduction
In this blog post, we will explore how to solve the LeetCode problem "1089" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.
Problem Statement
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
Explanation
Here's an efficient in-place solution for duplicating zeros in a fixed-length array:
- Two-Pass Approach: First, count the number of zeros to determine the necessary shifts. Then, iterate backward through the array, shifting elements to their final positions, duplicating zeros as needed.
In-Place Modification: Directly modify the input array without creating a new array, adhering to the problem's constraint.
Runtime Complexity: O(n), where n is the length of the array. Storage Complexity: O(1).
Code
def duplicate_zeros(arr: list[int]) -> None:
"""
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.
"""
zeros = arr.count(0)
n = len(arr)
for i in range(n - 1, -1, -1):
if arr[i] == 0:
for j in range(n - 1, i, -1):
if j < n - 1:
arr[j + 1] = arr[j]
if i + 1 < n: # Check to avoid out-of-bounds write
arr[i + 1] = 0
i -= 1 # Skip the duplicated zero on the next iteration if needed
else:
pass # No shifting or duplication needed for non-zero elements