Diagonal Difference | HackerRank
计算矩阵的对角线差
力扣有道求对角线和
1572. 矩阵对角线元素的和 - 力扣(LeetCode)
只要你知道两边的对角线怎么求,一切都会好起来的
左边的对角线就arr[i][i]
,右边的的是arr[i][length-1-i]
HackerRank让你求的是左右对角线的差的绝对值
1 | function diagonalDifference(arr: number[][]): number { |
遍历途中记录就行了
力扣的是求和,还需要关心到元素项是不是偶数,(说起来求差不用关心吗):
1 | var diagonalSum = function(mat) { |
return sum - mat[mid][mid] * (length & 1)
检查是否是奇数,如果是奇数,即中间元素被计算了两次,所以要减一次中心元素值
为什么会重复计算?
因为奇数项的话,会有一个中心值
1 2 3
4 5 6
7 8 9
第一轮
1+3 sum=4
5+5 sum=4+10 =14 这里算了两次
9+7 sum=14+16 = 30
length & 1
&与 两个位都为1时,结果才为1
如果length
是偶数,那他二进制最后一位就是0,相反就是1
那为什么求差就不用考虑奇偶呢
因为是求差,相同的早变成0了,没有的东西就不用考虑了