首页 > 其他分享 >1572. 矩阵对角线元素的和

1572. 矩阵对角线元素的和

时间:2023-08-12 21:11:12浏览次数:40  
标签:mat int List 复杂度 矩阵 对角线 1572

题目链接

给定一个正方形矩阵,返回对角线元素的和(两条对角线,中心的元素不要叠加两次)。

第一种方法:遍历矩阵

矩阵中某个位置(i, j)如果处于对角线上。则一定满足下列条件之一:

  • i = j;
  • i + j = n - 1;

根据上边的结论,可以遍历整个矩阵。如果满足条件之一,则表示该元素在对角线上,加入到答案中。根据矩阵的行数为奇数还是偶数,来决定是否减去中心元素。

class Solution:
    def diagonalSum(self, mat: List[List[int]]) -> int:
        n = len(mat)
        return sum(mat[i][j] for i in range(n) for j in range(n) \
                    if i == j or i + j == n - 1)

复杂度分析:

  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)

第二种方法:枚举对角线元素

逐行遍历,记录当前行号为i,则当前行中处于对角线的元素为:坐标(i,i)和坐标(i,n-i-1),因此把(i,i)和(i,n-i-1)处的数字加入到答案中。如果n是奇数的话,则主对角线与副对角线存在交点([n/2], [n/2]),该点会被计算两次。所以当n为奇数的时候,需要减掉交点处的值。

class Solution:
    def diagonalSum(self, mat: List[List[int]]) -> int:
        n = len(mat)
        total = 0
        mid = n // 2
        for i in range(n):
            total += mat[i][i] + mat[i][n - 1 - i]
        return total - mat[mid][mid] * (n & 1)

复杂度分析:

时间复杂度:O(n),其中n是矩阵mat的行数

空间复杂度:O(1)

class Solution:
    def diagonalSum(self, mat: List[List[int]]) -> int:
        n = len(mat)
        i = 0
        j = n - 1
        sum = 0
        while i < n:
            # 如果是正中心的元素
            if i == j:
                sum += mat[i][j]
            else:
                # 左上和右上开始遍历
                sum += mat[i][i] + mat[i][j]
            i += 1
            j -= 1

        return sum

 

标签:mat,int,List,复杂度,矩阵,对角线,1572
From: https://www.cnblogs.com/bowenliang/p/17625518.html

相关文章

  • 封装矩阵一系列
    structMatrix{typedeflonglongll;constllmod=1000000007;llmatrix[110][110];//矩阵里的每一个数llline,colu;//矩阵的行,列Matrixoperator*(constMatrix&b)const{Matrixans;ans.line=line,ans.colu=......
  • 4954: 矩阵游戏
    题目描述婷婷是个喜欢矩阵的小朋友,有一天她想用电脑生成一个巨大的\(n\)行\(m\)列的矩阵(你不用担心她如何存储)。她生成的这个矩阵满足一个神奇的性质:若用\(F[i,j]\)来表示矩阵中第\(i\)行第\(j\)列的元素,则\(F[i,j]\)满足下面的递推式:\[\begin{aligned}F[1,1]&=......
  • 矩阵游戏
    4954:矩阵游戏时间限制(普通/Java):2000MS/6000MS内存限制:65536KByte描述婷婷是个喜欢矩阵的小朋友,有一天她想用电脑生成一个巨大的n行m列的矩阵(你不用担心她如何存储)。她生成的这个矩阵满足一个神奇的性质:若用F[i][j]来表示矩阵中第i行第j列的元素,则F[i][j]满足下......
  • 剑指 Offer 12. 矩阵中的路径(中等)
    题目:classSolution{public:introw,col;booltraversal(vector<vector<char>>&board,stringword,inti,intj,intk){//传入棋盘,字符串,当前棋盘元素坐标,字符串索引if(i<0||i>=row||j<0||j>=col||board[i][j]!=word[k])retu......
  • 在库存数量的条件约束下,求满足产品需求的材料投入数量矩阵X的所有可行解,即BX=AC,求X
    问题有r种元素,某产品的元素构成比例为矩阵A;有n种材料,元素构成比例为矩阵B;已知该产品的需求量为C,材料的库存数量为矩阵D;在库存数量的条件约束下,求满足产品需求的材料投入数量矩阵X的所有可行解,即BX=AC,求X的所有可行解.提示当元素数量r=材料数量n时,有唯一解当r<n时,有多个......
  • 【机器学习|数学基础】Mathematics for Machine Learning系列之矩阵理论(12):相似形理论
    目录前言往期文章3.3线性变换的最简矩阵表示-相似形理论3.3.1一般数域上矩阵相似最简形定义3.9定理3.3.1前言Hello!小伙伴!非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ 自我介绍ଘ(੭ˊᵕˋ)੭昵称:海轰标签:程序猿|C++选手|学生简介:因C语言结识编程,随后转入计算......
  • 【机器学习|数学基础】Mathematics for Machine Learning系列之矩阵理论(13):Hamliton-Cay
    目录前言Hello!小伙伴!非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ 自我介绍ଘ(੭ˊᵕˋ)੭昵称:海轰标签:程序猿|C++选手|学生简介:因C语言结识编程,随后转入计算机专业,有幸拿过一些国奖、省奖…已保研。目前正在学习C++/Linux/Python学习经验:扎实基础+多做笔记+......
  • 【机器学习|数学基础】Mathematics for Machine Learning系列之矩阵理论(15):矩阵的范数
    前言Hello!小伙伴!非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ 自我介绍ଘ(੭ˊᵕˋ)੭昵称:海轰标签:程序猿|C++选手|学生简介:因C语言结识编程,随后转入计算机专业,有幸拿过一些国奖、省奖…已保研。目前正在学习C++/Linux/Python学习经验:扎实基础+多做笔记+多......
  • 【机器学习|数学基础】Mathematics for Machine Learning系列之矩阵理论(16):向量和矩阵的
    前言Hello!小伙伴!非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ 自我介绍ଘ(੭ˊᵕˋ)੭昵称:海轰标签:程序猿|C++选手|学生简介:因C语言结识编程,随后转入计算机专业,有幸拿过一些国奖、省奖…已保研。目前正在学习C++/Linux/Python学习经验:扎实基础+多做笔记+多......
  • 【机器学习|数学基础】Mathematics for Machine Learning系列之矩阵理论(20):方阵函数
    前言Hello!小伙伴!非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ 自我介绍ଘ(੭ˊᵕˋ)੭昵称:海轰标签:程序猿|C++选手|学生简介:因C语言结识编程,随后转入计算机专业,有幸拿过一些国奖、省奖…已保研。目前正在学习C++/Linux/Python学习经验:扎实基础+多做笔记+多......