สมมติว่าเรามีหนึ่งเมทริกซ์หรือคำสั่ง NxN เราต้องหาคู่ขององค์ประกอบที่สร้างความแตกต่างสูงสุดจากคอลัมน์ใดๆ ของเมทริกซ์ ดังนั้นหากเมทริกซ์เป็นเหมือน −
| 1 | 2 | 3 |
| 5 | 3 | 5 |
| 9 | 6 | 7 |
ดังนั้นผลลัพธ์จะเป็น 8 เนื่องจากทั้งคู่คือ (1, 9) จากคอลัมน์ 0
แนวคิดนี้ง่ายมาก เราต้องหาความแตกต่างระหว่างองค์ประกอบสูงสุดและต่ำสุดของแต่ละคอลัมน์ แล้วคืนค่าส่วนต่างสูงสุด
ตัวอย่าง
#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;
} ผลลัพธ์
Max difference : 12