Cho mảng chứa các số nguyên tố (có thể trùng lặp). Nhiệm vụ: xóa các phần tử trùng, giữ lại thứ tự xuất hiện đầu tiên. Ví dụ:
Đầu vào 1: {2,2,2,3,3,3,5,7} → Đầu ra: 2 3 5 7.
Đầu vào 2: {3,2,7,5,5} → Đầu ra: 3 2 7 5.
Phương pháp: Mảng đánh dấu
Vì các số nguyên tố thường nhỏ, ta dùng mảng visited[100] (giả sử số < 100). Duyệt mảng, nếu visited[arr[i]] == 0 thì đánh dấu = 1 và thêm vào vector kết quả.
Ví dụ mã nguồn
#include <bits/stdc++.h>
using namespace std;
vector<int> removeDuplicates(vector<int> &arr, int size) {
int visited[100] = {0};
vector<int> res;
for (int i = 0; i < size; i++) {
if (!visited[arr[i]]) {
visited[arr[i]] = 1;
res.push_back(arr[i]);
}
}
return res;
}
int main() {
vector<int> arr = {2,2,2,3,3,3,5,7};
vector<int> ans = removeDuplicates(arr, arr.size());
for (int x : ans) cout << x << ' ';
return 0;
}
Kết quả
2 3 5 7
Lưu ý: mã gốc trong ví dụ có lỗi in lặp lại vector trong vòng lặp; đã sửa ở trên.