Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Di chuyển tất cả 0 về cuối mảng C++

Cho mảng chứa số 0 và các số khác. Di chuyển tất cả 0 về cuối mảng, giữ thứ tự các phần tử khác không đổi.

Ví dụ

Input: [4, 5, 0, 3, 2, 0, 0, 0, 5, 0, 1]
Output: [4, 5, 3, 2, 5, 1, 0, 0, 0, 0, 0]

Thuật toán (Two-pointer, O(N))

  • Con trỏ idx = 0 vị trí đặt phần tử khác 0 tiếp theo.
  • Duyệt mảng: nếu arr[i] != 0 → arr[idx++] = arr[i].
  • Sau vòng lặp, điền 0 vào các vị trí từ idx đến hết.

Triển khai C++

#include <bits/stdc++.h>
using namespace std;

void moveZerosToEnd(int arr[], int n) {
    int idx = 0;
    for (int i = 0; i < n; i++)
        if (arr[i] != 0) arr[idx++] = arr[i];
    while (idx < n) arr[idx++] = 0;
}

int main() {
    int arr[] = {4,5,0,3,2,0,0,0,5,0,1};
    int n = 11;
    moveZerosToEnd(arr, n);
    for (int x : arr) cout << x << ' ';
    return 0;
}

Kết quả

4 5 3 2 5 1 0 0 0 0 0