1. Problem
Given an integer array nums, move all 0’s to the end of it while maintaining the relative order of the non-zero elements.
Note that you must do this in-place without making a copy of the array.
Example 1:
Input: nums = [0,1,0,3,12]
Output: [1,3,12,0,0]
Example 2:
Input: nums = [0]
Output: [0]
Constraints:
- 1 <= nums.length <= 10^4
- -2^31 <= nums[i] <= 2^31 - 1
2. Solution
I solved this problem like this.
- Complexity
- Time complexity : O(N)
- Space complexity : O(N)
- Step
- Check zero count
- Make ans list except zero value and only zero list.
- Put ans list values on nums.
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
zero_count = nums.count(0)
ans = [x for x in nums if x != 0] + [0] * zero_count
for i, x in enumerate(ans):
nums[i] = x