Cho mảng số nguyên kích thước N. Tìm hiệu lớn nhất giữa chỉ số đầu tiên và cuối cùng của cùng một phần tử trong mảng.
Ví dụ
Đầu vào
Arr[] = { 2, 1, 3, 1, 3, 2, 5, 5 }
Đầu ra - Hiệu tối đa: 5
Giải thích - Các cặp phần tử trùng:
(2,2): chỉ số 0 và 5 → 5-0 = 5 (1,1): chỉ số 1 và 3 → 3-1 = 2 (3,3): chỉ số 2 và 4 → 4-2 = 2 (5,5): chỉ số 6 và 7 → 7-6 = 1 Hiệu lớn nhất: 5
Đầu vào
Arr[] = { 2, 2, 3, 4, 8, 3, 4, 4, 8, 7 }
Đầu ra - Hiệu tối đa: 4
Phương pháp
- Hàm
maxDifference(int arr[], int n) - Khởi tạo maxD = 0
- 2 vòng lặp lồng nhau: i từ 0 đến n-2, j từ i+1 đến n-1
- Nếu arr[i] == arr[j] và (j-i) > maxD → cập nhật maxD
- Trả về maxD
Chương trình mẫu
#include <stdio.h>
int maxDifference(int arr[], int n) {
int maxD = 0;
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (arr[i] == arr[j] && (j - i) > maxD)
maxD = j - i;
}
}
return maxD;
}
int main() {
int Arr[] = {1, 4, 1, 3, 3, 5, 4, 5, 2};
int N = sizeof(Arr) / sizeof(Arr[0]);
printf("Hiệu tối đa chỉ số đầu/cuối: %d", maxDifference(Arr, N));
return 0;
}
Kết quả
Hiệu tối đa chỉ số đầu/cuối: 5