首页 > 其他分享 >2718. 查询后矩阵的和 (Medium)

2718. 查询后矩阵的和 (Medium)

时间:2023-06-13 15:47:47浏览次数:42  
标签:Medium hash 填充 2718 矩阵 queries col row

问题描述

2718. 查询后矩阵的和 (Medium) 给你一个整数 n 和一个下标从 0 开始的 二维数组 que ries ,其中 queries[i] = [typeᵢ, indexᵢ, valᵢ]

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

  • 如果 typeᵢ == 0 ,将第 indexᵢ 行的元素全部修改为 valᵢ ,覆盖任何之前的值。
  • 如果 typeᵢ == 1 ,将第 indexᵢ 列的元素全部修改为 valᵢ ,覆盖任何之前的值。

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= n <= 10⁴
  • 1 <= queries.length <= 5 * 10⁴
  • queries[i].length == 3
  • 0 <= typeᵢ <= 1
  • 0 <= indexᵢ < n
  • 0 <= valᵢ <= 10⁵

解题思路

本题是 Leetcode 第 348 期的第三题,当时太蠢了,做了半天搞不定,一直在想是不是要用什么高级的数据结构,实际上并不难,主要是脑子要转过这个弯。

本题本质上还是个模拟题,只是如果按照题目意思,正序模拟,一步步修改数值并调整覆盖,那么就掉坑里了,必然超时。

正难则反,实际上,我们可以尝试倒序进行模拟,那么我们就不用考虑覆盖了,只需考虑行填充或者列填充时,填充多少个。

我们可以用哈希表来记录未被填充的行或者列,倒序遍历时,如果发现当前行已经被填充了,那就跳过,否则给 $total$ 加上 $val \times k$,$k$ 表示还没有被填充的列的数目;填充列的情况是类似的。

代码

class Solution {
  public:
    long long matrixSumQueries(int n, vector<vector<int>> &queries) {
        // 倒序处理
        unordered_set<int> col_hash, row_hash;
        for (int i = 0; i < n; ++i) {
            col_hash.insert(i);
            row_hash.insert(i);
        }
        int m = queries.size();
        long long total = 0;
        for (int i = m - 1; i >= 0 && !col_hash.empty() && !row_hash.empty(); --i) {
            if (queries[i][0] == 0) {
                // 修改行
                if (row_hash.find(queries[i][1]) == row_hash.end()) {
                    // 说明后面还会被修改,直接不管他
                    continue;
                }
                total += col_hash.size() * queries[i][2];
                row_hash.erase(queries[i][1]);
            } else {
                // 修改列
                if (col_hash.find(queries[i][1]) == col_hash.end()) {
                    continue;
                }
                total += row_hash.size() * queries[i][2];
                col_hash.erase(queries[i][1]);
            }
        }
        return total;
    }
};

标签:Medium,hash,填充,2718,矩阵,queries,col,row
From: https://www.cnblogs.com/zwyyy456/p/17477720.html

相关文章

  • 28.找出字符串中第一个匹配项的下标 (Medium)
    问题描述28.找出字符串中第一个匹配项的下标(Medium)给你两个字符串haystack和needle,请你在haystack字符串中找出needle字符串的第一个匹配项的下标(下标从0开始)。如果needle不是haystack的一部分,则返回-1。示例1:输入:haystack="sadbutsad",needle="sad......
  • 373. 查找和最小的 K 对数字 (Medium)
    问题描述373.查找和最小的K对数字(Medium)给定两个以升序排列的整数数组nums1和nums2,以及一个整数k。定义一对值(u,v),其中第一个元素来自nums1,第二个元素来自nums2。请找到和最小的k个数对(u₁,v₁),(u₂,v₂)...(uₖ,vₖ)。示例1:输入:nums1......
  • 矩阵乘法模板代码
    CImod=1e9+7;structmatrix{inta[maxm][maxm],n,m;};matrixmatrixMul(matrixp,matrixq){matrixres;res.n=p.n,res.m=q.m;f(i,0,res.n-1)f(j,0,res.m-1){ res.a[i][j]=0;f(k,0,p.m-1)......
  • python 中使用zip实现矩阵转置
     001、[root@PC1test04]#lsa.txttest.py[root@PC1test04]#cata.txt##测试数据010203040506070809101112131415161718192021222324252627282930[root@PC1test04]#cattest.py##测试程序#!/usr/bin/envpython#-*......
  • 51nod-1158 全是1的最大子矩阵(单调栈)
    原题链接1158 全是1的最大子矩阵基准时间限制:1 秒空间限制:131072 KB分值: 80 难度:5级算法题 收藏 关注Input第1行:2个数m,n中间用空格分隔(2 <= m,n <= 500)第2 - N + 1行:每行m个数,中间用空格分隔,均为0或1。......
  • 杨氏矩阵中找是否存在k
    //杨氏矩阵查找k是否存在时间复杂数小于O(N),O(N)为穷举法用的时间intFindNum1(int(*arr)[3],intk,introw,intcol){ inti=0; intj=col-1; while(i<row&&j>0) { if(arr[i][j]<k) { i++; } elseif(arr[i][j]>k) { j--; } else { return......
  • 矩阵乘法与动态 DP 入门
    矩阵乘法及广义矩阵乘法前置知识:矩阵相关基础概念。记\(A(i,j)\)表示矩阵\(A\)的第\(i\)行第\(j\)列,\(n_A\)为\(A\)的行数,\(m_A\)为\(A\)的列数。定义矩阵加法\(A+B\)为(\(n_A=n_B,m_A=m_B\)):\[\\\\\[A+B](i,j)=A(i,j)+B(i,j)\]矩阵加法有交换律,结合......
  • 2023-06-10:给定一个由 n 个节点组成的网络,用 n x n 个邻接矩阵 graph 表示 在节点网络
    2023-06-10:给定一个由n个节点组成的网络,用nxn个邻接矩阵graph表示在节点网络中,只有当graph[i][j]=1时,节点i能够直接连接到另一个节点j。一些节点initial最初被恶意软件感染。只要两个节点直接连接,且其中至少一个节点受到恶意软件的感染,那么两个节点都将被恶意软件......
  • 2023-06-10:给定一个由 n 个节点组成的网络,用 n x n 个邻接矩阵 graph 表示 在节点网络
    2023-06-10:给定一个由n个节点组成的网络,用nxn个邻接矩阵graph表示在节点网络中,只有当graph[i][j]=1时,节点i能够直接连接到另一个节点j。一些节点initial最初被恶意软件感染。只要两个节点直接连接,且其中至少一个节点受到恶意软件的感染,那么两个节点都将被恶意......
  • 2022-2023 春学期 矩阵与数值分析 C7 常微分方程的数值解法
    2022-2023春学期矩阵与数值分析C7常微分方程的数值解法原文C7常微分方程的数值解法问题描述一阶常微分方程的初值问题\[\left\{\begin{array}{l}u'=f(t,u),\;a\leqt\leqb\\u(a)=u_0\end{array}\right.\]解的存在唯一性:若\(f(t,u)\)满足Lipschitz条件,即存在......