In [2]:
# Solution 1

def moveZerosToEnd(a):
    count = 0
    for i in range(len(a)):
        if a[i] != 0:
            a[count] = a[i]
            count += 1
    
    for i in range(count, len(a)):
        a[i] = 0
    
    return count

In [14]:
# Solution 2
def swap(a, i, j):
    first = a[i]
    a[i] = a[j]
    a[j] = first
        
def moveZerosToEnd2(a):
    n = len(a)
    indexOfLastNonZero = n - 1
    for i in range(n):
        if a[i] == 0 and i < indexOfLastNonZero:
            while indexOfLastNonZero > i and a[indexOfLastNonZero] == 0:
                indexOfLastNonZero = indexOfLastNonZero - 1
            swap(a, i, indexOfLastNonZero)
    return indexOfLastNonZero

In [3]:
a = [1, 0, -1, 2, 0]
print(moveZerosToEnd(a))
print(a)


3
[1, -1, 2, 0, 0]

In [18]:
a = [1, 0, -1, 2, 0]
b = [0, 0, 0]
c = [1]
print(moveZerosToEnd2(c))
print(c)


0
[1]

In [ ]: