Cho một mảng số nguyên có nhiều phần tử trùng lặp. Nhiệm vụ là tìm khoảng cách tối đa giữa hai lần xuất hiện của cùng một phần tử.
Ví dụ
Đầu vào
Arr[] = { 1, 2, 4, 1, 3, 4, 2, 5, 6, 5 }
Đầu ra - Khoảng cách tối đa: 4
Giải thích - Các phần tử lặp và chỉ số:
1: chỉ số đầu 0, cuối 3 → khoảng cách = 3-0-1 = 2 2: chỉ số đầu 1, cuối 6 → khoảng cách = 6-1-1 = 4 5: chỉ số đầu 7, cuối 9 → khoảng cách = 9-7-1 = 1 Khoảng cách tối đa: 4
Đầu vào
Arr[] = { 10, 20, 1, 10, 10, 21, 12, 0 }
Đầu ra - Khoảng cách tối đa: 3
Lưu ý - Nếu mảng không có phần tử lặp, trả về -1
Phương pháp
- Nhận mảng Arr[]
- Hàm
maxDistance(int arr[], int n) - Khởi tạo maxD = -1
- Duyệt mảng với 2 vòng lặp lồng nhau
- Nếu arr[i] == arr[j], tính temp = j - i - 1
- Cập nhật maxD nếu temp lớn hơn
- Trả về maxD
Chương trình mẫu
#include <stdio.h>
#include <stdlib.h>
int maxDistance(int arr[], int n) {
int maxD = -1;
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (arr[i] == arr[j]) {
int temp = abs(j - i - 1);
if (temp > maxD)
maxD = temp;
}
}
}
return maxD;
}
int main() {
int Arr[] = {1, 2, 4, 1, 3, 4, 2, 5, 6, 5};
printf("Khoảng cách tối đa: %d", maxDistance(Arr, 10));
return 0;
}
Kết quả
Khoảng cách tối đa: 4