โจทย์
ได้รับ Square Matrix ขนาด n×n หาค่าสูงสุดและต่ำสุดจากเมทริกซ์
ตัวอย่าง
ถ้าเมทริกซ์ที่ให้มาคือ
{{15, 17, 19}, {5, 1, 7}, {14, 5, 16}}
ค่าต่ำสุดคือ 1 และค่าสูงสุดคือ 19
อัลกอริทึม
- เลือกสององค์ประกอบจากเมทริกซ์ หนึ่งจากต้นแถว อีกหนึ่งจากท้ายแถวเดียวกัน
- เปรียบเทียบพวกเขา และต่อมาเปรียบเทียบค่าที่น้อยกว่ากับค่าต่ำสุดของเมทริกซ์ และค่าที่มากกว่ากับค่าสูงสุดของเมทริกซ์
- สำหรับสององค์ประกอบต้องการ 3 ครั้งการเปรียบเทียบ ดังนั้นสำหรับการท่องทั้งเมทริกซ์ ต้องการ 3/2 n² ครั้งการเปรียบเทียบ
ตัวอย่างโค้ด
#include <bits/stdc++.h>
#define MAX 200
using namespace std;
void getMinMax(int matrix[MAX][MAX], int n) {
int min = INT_MAX;
int max = INT_MIN;
for (int i = 0; i < n; ++i) {
for (int j = 0; j <= n / 2; ++j) {
if (matrix[i][j] > matrix[i][n - j - 1]) {
if (min > matrix[i][n - j - 1]) {
min = matrix[i][n - j - 1];
}
if (max < matrix[i][j]) {
max = matrix[i][j];
}
} else {
if (min > matrix[i][j]) {
min = matrix[i][j];
}
if (max < matrix[i][n - j - 1]) {
max = matrix[i][n - j - 1];
}
}
}
}
cout << "Maximum = " << max << ", Minimum = " << min << endl;
}
int main() {
int matrix[MAX][MAX] = { {15, 17, 19}, {5, 1, 7}, {14, 5, 16} };
getMinMax(matrix, 3);
return 0;
}
ผลลัพธ์
Maximum = 19, Minimum = 1