Đề bài
Trả về danh sách với các giá trị trùng lặp đã bị loại bỏ, giữ nguyên lần xuất hiện đầu tiên của mỗi giá trị theo thứ tự ban đầu.
Cài đặt hàm remove_duplicates(numbers).
Đầu vào
numbers: Danh sách các số nguyên.
Đầu ra
Trả về danh sách không chứa các giá trị trùng lặp.
Ràng buộc
0 ≤ độ dài ≤ 100.000
Ví dụ
Đầu vào:
numbers = [3, 1, 3, 2, 1]
Kết quả mong đợi:
expected = [3, 1, 2]
Đầu vào:
std::vector<long long> numbers = {3, 1, 3, 2, 1};
Kết quả mong đợi:
std::vector<long long> expected = {3, 1, 2};
Đầu vào:
long[] numbers = new long[] {3, 1, 3, 2, 1};
Kết quả mong đợi:
long[] expected = new long[] {3, 1, 2};
Giải thích
Giữ lại 3, 1, sau đó là 2; các số 3 và 1 xuất hiện sau bị loại bỏ: [3, 1, 2].
Đầu vào:
numbers = [7, 7, 7]
Kết quả mong đợi:
expected = [7]
Đầu vào:
std::vector<long long> numbers = {7, 7, 7};
Kết quả mong đợi:
std::vector<long long> expected = {7};
Đầu vào:
long[] numbers = new long[] {7, 7, 7};
Kết quả mong đợi:
long[] expected = new long[] {7};
Giải thích
Chỉ giữ lại số 7 đầu tiên: [7].
Hướng tiếp cận
Hãy tự thử trước, sau đó mở từng gợi ý một.
Gợi ý 1
Giữ lần xuất hiện đầu tiên của mỗi giá trị và bỏ qua các lần lặp sau.
Gợi ý 2
Một set hoặc cấu trúc tra cứu tương tự giúp bạn biết nhanh một giá trị đã thấy chưa.
Gợi ý 3
Giữ nguyên thứ tự xuất hiện đầu tiên, không phải thứ tự đã sắp xếp.
Độ phức tạp mong đợi
thời gian O(n), bộ nhớ phụ O(n)
Tham khảo
Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.