【发布时间】:2021-05-22 08:00:07
【问题描述】:
我想获得给定二维数组左右对角线之和的绝对差。 我写了以下函数-
int diagonalDifference(vector<vector<int>> arr) {
int n=arr.size();
int summ1=0,summ2=0,result=0;
for(int i=0;i<n;i++)
{ for(int j=0;j<n;j++)
{
if(i==j)
{ summ1=summ1+arr[i][j];}
else if((i+j)==(n-1))
{ summ2=summ2+arr[i][j];}
}
}
result=abs(summ1-summ2);
return result;
}
input array
11 2 4
4 5 6
10 8 -12
Explanation- summ1=11+5+(-12)
summ2=4++5+10 result=|4-19|=|-15|=15
expected output: 15
The output I am getting is 10
【问题讨论】:
-
您是否尝试过调试您的代码并在纸上进行分析?
-
不...我想我应该这样做。
-
顺便说一句,您可以简单地使用一个循环,而不是遍历所有单元格:
for(int i=0; i<n; i++) { sum1 += arr[i][i]; sum2 += arr[i][n-i-1]; } -
@Aziuth 是的,你的方法比我的好得多。我会做的。????
-
还可以考虑通过
const引用而不是值(复制调用者传递的向量)将arr传递给函数。最好不要有一个函数定义,其中参数列表实际上依赖于using namespace std,即给它它的完整类型const std::vector<std::vector<int> > &arr。您可能还需要检查两个维度是否为n- 因为如果您的循环超出范围,使用operator[]()访问元素将具有未定义的行为。
标签: c++ arrays data-structures