蓝桥杯day04——查询后矩阵的和

1.题目

给你一个整数 n 和一个下标从 0 开始的 二维数组 queries ,其中 queries[i] = [typei, indexi, vali] 。

一开始,给你一个下标从 0 开始的 n x n 矩阵,所有元素均为 0 。每一个查询,你需要执行以下操作之一:

  • 如果 typei == 0 ,将第 indexi 行的元素全部修改为 vali ,覆盖任何之前的值。
  • 如果 typei == 1 ,将第 indexi 列的元素全部修改为 vali ,覆盖任何之前的值。

请你执行完所有查询以后,返回矩阵中所有整数的和。

示例 1:

蓝桥杯day04——查询后矩阵的和_第1张图片

输入:n = 3, queries = [[0,0,1],[1,2,2],[0,2,3],[1,0,4]]
输出:23
解释:上图展示了每个查询以后矩阵的值。所有操作执行完以后,矩阵元素之和为 23 。

示例 2:

蓝桥杯day04——查询后矩阵的和_第2张图片

输入:n = 3, queries = [[0,0,4],[0,1,2],[1,0,1],[0,2,3],[1,2,1]]
输出:17
解释:上图展示了每一个查询操作之后的矩阵。所有操作执行完以后,矩阵元素之和为 17 。

提示:

  • 1 <= n <= 104
  • 1 <= queries.length <= 5 * 104
  • queries[i].length == 3
  • 0 <= typei <= 1
  • 0 <= indexi < n
  • 0 <= vali <= 105

 

2.解析

  1. 定义两个字典 d_r 和 d_l,分别用于存储每一行和每一列的数据。字典的键是行或列的索引,值是该行或该列的元素列表。

  2. 遍历查询列表 queries,对于每个查询,判断其类型(取出行或取出列)以及其索引。

    • 如果查询类型是取出行(row[0]==0),并且该行索引 i 不在 d_r 的键中,那么将该行数据添加到 d_r 中。
    • 如果查询类型是取出列(row[0]==1),并且该列索引 i 不在 d_l 的键中,那么将该列数据添加到 d_l 中。
  3. 遍历 d_r 的值和 d_l 的值,分别计算它们的和,并累加到变量 res 中。

  4. 返回累加结果 res

3.python代码

class Solution:
    def matrixSumQueries(self, n: int, queries: list[list[int]]) -> int:
        d_r=dict()
        d_l=dict()

        for row in queries[::-1]:
            i=row[1]
            if row[0]==0 and i not in d_r.keys():
                d_r[i]=[row[2] for j in range(n)]
                for k in d_l:
                    d_r[i][k]=0
            elif row[0]==1 and i not in d_l.keys():
                d_l[i]=[row[2] for j in range(n)]
                for k in d_r:
                    d_l[i][k]=0
        res=0
        for r in d_r.values():
            res+=sum(r)
        for l in d_l.values():
            res+=sum(l)
        return res

4.运行结果

蓝桥杯day04——查询后矩阵的和_第3张图片 

你可能感兴趣的:(#,蓝桥杯,蓝桥杯,矩阵,python)