Giả sử chúng ta có một ma trận hoặc thứ tự NxN. Chúng ta phải tìm một cặp phần tử tạo nên sự khác biệt lớn nhất so với bất kỳ cột nào của ma trận. Vì vậy, nếu ma trận giống như -
1 | 2 | 3 |
5 | 3 | 5 |
9 | 6 | 7 |
Vì vậy, đầu ra sẽ là 8. Vì cặp là (1, 9) từ cột 0.
Ý tưởng rất đơn giản, chúng ta chỉ cần tìm sự khác biệt giữa phần tử max và min của mỗi cột. Sau đó, trả lại chênh lệch tối đa.
Ví dụ
#include<iostream> #define N 5 using namespace std; int maxVal(int x, int y){ return (x > y) ? x : y; } int minVal(int x, int y){ return (x > y) ? y : x; } int colMaxDiff(int mat[N][N]) { int diff = INT_MIN; for (int i = 0; i < N; i++) { int max_val = mat[0][i], min_val = mat[0][i]; for (int j = 1; j < N; j++) { max_val = maxVal(max_val, mat[j][i]); min_val = minVal(min_val, mat[j][i]); } diff = maxVal(diff, max_val - min_val); } return diff; } int main() { int mat[N][N] = {{ 1, 2, 3, 4, 5 }, { 5, 3, 5, 4, 0 }, { 5, 6, 7, 8, 9 }, { 0, 6, 3, 4, 12 }, { 9, 7, 12, 4, 3 },}; cout << "Max difference : " << colMaxDiff(mat) << endl; }
Đầu ra
Max difference : 12