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

Chương trình C++ tìm mảng sau khi xóa các lần xuất hiện bên trái của phần tử trùng lặp

Cho mảng A với n phần tử. Yêu cầu xóa các phần tử trùng lặp, chỉ giữ lại lần xuất hiện cuối cùng (bên phải nhất) của mỗi giá trị. Thứ tự tương đối của các phần tử còn lại không thay đổi.

Ví dụ

Với A = [1, 5, 5, 1, 6, 1], đầu ra là [5, 6, 1].

Giải thuật

Duyệt mảng từ phải sang trái. Sử dụng mảng vis đánh dấu các giá trị đã gặp. Nếu chưa gặp, thêm vào mảng kết quả b. Cuối cùng in mảng b theo thứ tự ngược lại (từ cuối về đầu) để khôi phục thứ tự gốc.

Mã C++

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

void solve(vector<int> A) {
    int b[1200], vis[1200], x = 0;
    int n = A.size();
    for (int i = n - 1; i >= 0; i--) {
        if (!vis[A[i]]) {
            b[x] = A[i];
            x++;
            vis[A[i]] = 1;
        }
    }
    for (int i = x - 1; i >= 0; i--)
        cout << b[i] << ", ";
}

int main() {
    vector<int> A = { 1, 5, 5, 1, 6, 1 };
    solve(A);
}

Đầu vào / Đầu ra

Input: { 1, 5, 5, 1, 6, 1 }
Output: 5, 6, 1,