Đề bài: Cho một mảng gồm các số ngẫu nhiên, hãy di chuyển tất cả số 0 trong mảng đó về cuối mảng.
Ví dụ: Cho mảng {1, 9, 8, 4, 0, 0, 2, 7, 0, 6, 0}, nó sẽ trở thành {1, 9, 8, 4, 2, 7, 6, 0, 0, 0, 0} sau khi sắp xếp. Thứ tự của tất cả các phần tử khác đều giống nhau.
Input : arr[] = {1, 2, 0, 4, 3, 0, 5, 0};
Output : arr[] = {1, 2, 4, 3, 5, 0, 0, 0};
Input : arr[] = {1, 2, 0, 0, 0, 3, 6};
Output : arr[] = {1, 2, 3, 6, 0, 0, 0};
Trong bài viết này, Quản Trị Mạng sẽ cùng các bạn viết chương trình di chuyển số 0 bằng Python.
Cách 1: Sử dụng vòng lặp
Di chuyển mảng "arr" từ trái qua phải. Trong khi di chuyển, hãy duy trì kiểm tra phần tử khác 0 trong mảng. Hãy đặt vị trí các phần tử khác 0 là "count". Với mỗi phần tử khác 0 arr[i], hãy đặt phần tử ở "arr[count]" và tăng giá trị "count". Sau khi hoàn thành việc di chuyển tất cả các phần tử khác 0 đã được chuyển lên phía trước và "count" đã được đặt làm chỉ mục của số 0 đầu tiên. Bây giờ, việc chúng ta cần làm là chạy một vòng lặp cho tất cả các phần tử bằng 0 từ "count" cho đến hết mảng.
Dưới đây là code mẫu:
# Python3 code to move all zeroes
# at the end of array
# Function which pushes all
# zeros to end of an array.
def pushZerosToEnd(arr, n):
count = 0 # Count of non-zero elements
# Traverse the array. If element
# encountered is non-zero, then
# replace the element at index
# 'count' with this element
for i in range(n):
if arr[i] != 0:
# here count is incremented
arr[count] = arr[i]
count+=1
# Now all non-zero elements have been
# shifted to front and 'count' is set
# as index of first 0. Make all
# elements 0 from count to end.
while count < n:
arr[count] = 0
count += 1
# Driver code
arr = [1, 9, 8, 4, 0, 0, 2, 7, 0, 6, 0, 9]
n = len(arr)
pushZerosToEnd(arr, n)
print("Mảng sau khi di chuyển toàn bộ số 0 về cuối :")
print(arr)
# This code is contributed by "Abhishek Sharma 44"
Cách 2: Phân vùng mảng
Cách tiếp cận của phương pháp này khá đơn giản. Chúng ta sẽ sử dụng 0 làm phần tử pivot và bất cứ khi nào chúng ta thấy một phần tử khác 0, chúng ta sẽ hoán đổi nó với phần tử pivot. Nhờ vậy, các phần tử khác 0 sẽ xuất hiện ngay từ đầu.
Code mẫu:
# Python Program to move all zeros to the end
A = [5, 6, 0, 4, 6, 0, 9, 0, 8]
n = len(A)
j = 0
for i in range(n):
if A[i] != 0:
A[j], A[i] = A[i], A[j] # Partitioning the array
j += 1
print(A) # Print the array
# This code is contributed by Tapesh(tapeshdua420)
Cách 3: Sử dụng phương thức đếm số 0
Trong cách tiếp cận này, chúng ta sẽ duyệt qua toàn bộ mảng và sẽ đếm số lượng số 0 có trong mảng. Trong khi đếm, chúng ta sẽ xóa số 0 khỏi mảng.
Sau khi hoàn thành quá trình trên, chúng ta sẽ đẩy ngược số lượng số 0 đếm được vào mảng.
Dưới đây là code mẫu:
# Python program to shift all zeros
# to right most side of array
# without affecting order of non-zero
# elements
# Given list
arr = [5, 6, 0, 4, 6, 0, 9, 0, 8]
# Storing all non zero values
nonZeroValues = [x for x in arr if x != 0]
# Storing all zeroes
zeroes = [j for j in arr if j == 0]
# Updating the answer
arr = nonZeroValues + zeroes
# Printing the answer
print( "Mảng sau khi di chuyển toàn bộ số 0 về cuối là: " + arr)
Quản Trị Mạng hy vọng rằng bài viết này sẽ có ích đối với bạn!