【问题标题】:Absolute difference of sum of two diagonals of a 2d array in c++ [closed]c++中二维数组的两条对角线之和的绝对差[关闭]
【发布时间】: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&lt;n; i++) { sum1 += arr[i][i]; sum2 += arr[i][n-i-1]; }
  • @Aziuth 是的,你的方法比我的好得多。我会做的。????
  • 还可以考虑通过const 引用而不是值(复制调用者传递的向量)将arr 传递给函数。最好不要有一个函数定义,其中参数列表实际上依赖于using namespace std,即给它它的完整类型const std::vector&lt;std::vector&lt;int&gt; &gt; &amp;arr。您可能还需要检查两个维度是否为n - 因为如果您的循环超出范围,使用operator[]() 访问元素将具有未定义的行为。

标签: c++ arrays data-structures


【解决方案1】:

这是一个 O(n) 复杂度的解决方案。 reference

for (int i = 0; i < n; i++)
    {
        summ1 += arr[i][i];
        summ2 += arr[i][n-i-1];
    }

【讨论】:

    【解决方案2】:

    else-if 本身应该是一个if

    else-if 阻止将5 添加到summ2。也就是说最终的计算结果是:(11+5-12)-(4+10) = -10.,其绝对值为10

    【讨论】:

    • 哦,是的...我明白了...谢谢?
    猜你喜欢
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2016-04-17
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    相关资源
    最近更新 更多