Cho 2 mảng arr1[], arr2[]. Tính tích: max(arr1) × min(arr2).
Ví dụ
Đầu vào - arr1={6,2,5,4,1}, arr2={3,7,5,9,6}
Đầu ra - 18 (6 × 3)
Đầu vào - arr1={2,3,9,11,1}, arr2={5,4,2,6,9}
Đầu ra - 22 (11 × 2)
Phương pháp
- Sắp xếp cả 2 mảng tăng dần
- Max arr1 = phần tử cuối, Min arr2 = phần tử đầu
- Nhân 2 giá trị này
Chương trình mẫu
#include <stdio.h>
void sortArr(int arr[], int n) {
for (int i = 0; i < n-1; i++)
for (int j = i+1; j < n; j++)
if (arr[i] > arr[j]) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
int minMaxProduct(int arr1[], int arr2[], int n1, int n2) {
sortArr(arr1, n1);
sortArr(arr2, n2);
return arr1[n1-1] * arr2[0];
}
int main() {
int arr1[] = {2, 3, 9, 11, 1};
int arr2[] = {5, 4, 2, 6, 9};
int n1 = sizeof(arr1)/sizeof(arr1[0]);
int n2 = sizeof(arr2)/sizeof(arr2[0]);
printf("%d\n", minMaxProduct(arr1, arr2, n1, n2));
return 0;
}
Kết quả
22
Tối ưu: Có thể tìm max/min O(n) không cần sắp xếp O(n log n).