Trợ lý học tập AI - Câu trả lời này chỉ mang tính tham khảo
Đề bài yêu cầu tìm số lượng đoạn con liên tiếp có nhiều nhất k phần tử riêng biệt trong một dãy A gồm n phần tử.
Để giải quyết bài toán này, ta có thể sử dụng kỹ thuật cửa sổ trượt (sliding window). Ta duyệt qua từng phần tử trong dãy A và duy trì một cửa sổ có kích thước là k. Mỗi lần di chuyển cửa sổ, ta kiểm tra số lượng phần tử riêng biệt trong cửa sổ và cập nhật kết quả tối đa.
Dưới đây là code giải bằng ngôn ngữ C++:
```cpp
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
int n, k;
cin >> n >> k;
int a[n];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
unordered_map<int,> count;
int distinctCount = 0;
int maxDistinctCount = 0;
int left = 0;
for (int right = 0; right < n; right++) {
count[a[right]]++;
if (count[a[right]] == 1) {
distinctCount++;
}
if (right - left + 1 > k) {
count[a[left]]--;
if (count[a[left]] == 0) {
distinctCount--;
}
left++;
}
maxDistinctCount = max(maxDistinctCount, distinctCount);
}
cout << maxDistinctCount << endl;
return 0;
}
```
Độ phức tạp của thuật toán này là O(n), với n là số phần tử trong dãy A.
FQA.vn Nền tảng kết nối cộng đồng hỗ trợ giải bài tập học sinh trong khối K12. Sản phẩm được phát triển bởi CÔNG TY TNHH CÔNG NGHỆ GIA ĐÌNH (FTECH CO., LTD)
Điện thoại: 1900636019
Email: info@fqa.vn
Địa chỉ: Số 21 Ngõ Giếng, Phố Đông Các, Phường Ô Chợ Dừa, Quận Đống Đa, Thành phố Hà Nội, Việt Nam.