用 C++ 查找矩阵中的特定对
假设有一个 n x n 整数矩阵 mat。我们需要找到所有索引选择中最大的 mat(c, d) - mat(a, b) 值。这里我们必须记住 c > a 且 d > b。因此,如果矩阵如下所示 −
| 1 | 2 | -1 | -4 | -20 |
| -8 | -3 | 4 | 2 | 1 |
| 3 | 8 | 6 | 1 | 3 |
| -4 | -1 | 1 | 7 | -6 |
| 0 | -4 | 10 | -5 | 1 |
输出将为 18。这是因为 mat[4, 2] - mat[1, 0] = 18 差异最大。
为了解决这个问题,我们将预处理矩阵,使索引 (i, j) 存储矩阵中从 (i, j) 到 (n - 1, n - 1) 的元素最大值,并且在这个过程中不断更新迄今为止找到的最大值。然后,我们将返回最大值。
示例
#include<iostream>
#define N 5
using namespace std;
int findMaxValue(int matrix[][N]) {
int maxValue = -99999;
int arr_max[N][N];
arr_max[N-1][N-1] = matrix[N-1][N-1];
int max_val = matrix[N-1][N-1];
for (int j = N - 2; j >= 0; j--) {
if (matrix[N-1][j] > max_val)
max_val = matrix[N - 1][j];
arr_max[N-1][j] = max_val;
}
max_val = matrix[N - 1][N - 1];
for (int i = N - 2; i >= 0; i--) {
if (matrix[i][N - 1] > max_val)
max_val = matrix[i][N - 1];
arr_max[i][N - 1] = max_val;
}
for (int i = N-2; i >= 0; i--) {
for (int j = N-2; j >= 0; j--) {
if (arr_max[i+1][j+1] - matrix[i][j] > maxValue)
maxValue = arr_max[i + 1][j + 1] - matrix[i][j];
arr_max[i][j] = max(matrix[i][j],max(arr_max[i][j + 1],arr_max[i + 1][j]) );
}
}
return maxValue;
}
int main() {
int mat[N][N] = {
{ 1, 2, -1, -4, -20 },
{ -8, -3, 4, 2, 1 },
{ 3, 8, 6, 1, 3 },
{ -4, -1, 1, 7, -6 },
{ 0, -4, 10, -5, 1 }
};
cout << "Maximum Value is " << findMaxValue(mat);
}输出
Maximum Value is 18
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP