C++程序 找到两个对角线之和的差值
给定一个矩阵 n X n 。任务是计算其对角线和的绝对差值。
示例:
Input : mat[][] = 11 2 4
4 5 6
10 8 -12
Output : 15
主对角线的总和=11+5+(-12)=4。
次对角线的总和=4+5+10=19。
差值= |19 - 4 |= 15。
Input : mat[][] = 10 2
4 5
Output : 7
计算方阵的两个对角线的总和。在矩阵的第一个对角线上,行索引=列索引,即如果i = j,则mat[i][j]位于第一个对角线上。在另一个对角线上,行索引= n–1–column index,即如果i = n-1-j,则mat[i][j]位于第二个对角线上。通过使用两个循环,我们遍历整个矩阵并计算矩阵的对角线上的总和。
以下是此方法的实现:
// C++ program to find the difference
// between the sum of diagonal.
#include <bits/stdc++.h>
#define MAX 100
using namespace std;
int difference(int arr[][MAX], int n)
{
// 初始化对角线之和
int d1 = 0,d2 = 0;
for(int i=0;i < n;i++)
{
// 查找主对角线之和
if(i == j)
d1 += arr[i][j];
// 查找次对角线之和
if(i==n-j-1)
d2 += arr[i][j];
}
}
// 对角差值的绝对值
return abs(d1-d2);
}
// 驱动程序
int main()
{
int n = 3;
int arr[][MAX] =
{
{11, 2, 4},
{4 , 5, 6},
{10, 8, -12}
};
cout << difference(arr,n);
返回0;
}}
输出:
15
时间复杂度 : O(N * N),因为我们使用嵌套循环遍历N * N次。
辅助空间 : O(1),因为我们没有使用任何额外的空间。
我们可以 优化以上方案 以在O(n)中使用单元格中的索引中存在的模式来工作。
// C++ program to find the difference
// between the sum of diagonal.
#include <bits/stdc++.h>
#define MAX 100
using namespace std;
int difference(int arr[][MAX], int n)
{
// 初始化对角线之和
int d1 = 0,d2 = 0;
for(int i=0;i
**Output:**
```cpp
15
时间复杂度 :O(N),因为我们使用一个循环遍历N次。
辅助空间 :O(1),因为我们没有使用任何额外的空间。