Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình C ++ để tìm mảng sau khi loại bỏ các phần tử trùng lặp còn lại

Giả sử chúng ta có một mảng A với n phần tử. Chúng tôi muốn loại bỏ các phần tử trùng lặp. Chúng tôi muốn chỉ để lại mục nhập ngoài cùng bên phải cho mỗi phần tử của mảng. Thứ tự tương đối của các phần tử duy nhất còn lại không được thay đổi.

Vì vậy, nếu đầu vào là A =[1, 5, 5, 1, 6, 1], thì đầu ra sẽ là [5, 6, 1]

Các bước

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

Define two arrays b and vis of size: 1200 each
x := 0
n := size of A
for initialize i := n - 1, when i >= 0, update (decrease i by 1), do:
   if vis[A[i]] is zero, then:
      b[x] := A[i]
      (increase x by 1)
      vis[A[i]] := 1
for initialize i := x - 1, when i >= 0, update (decrease i by 1), do:
   print b[i]

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#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

{ 1, 5, 5, 1, 6, 1 }

Đầu ra

5, 6, 1,