LeetCode——查询后矩阵的和

这篇具有很好参考价值的文章主要介绍了LeetCode——查询后矩阵的和。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、题目

2、题目解读

3、代码


1、题目

2718. 查询后矩阵的和 - 力扣(Leetcode)

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

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

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

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

示例 1:

LeetCode——查询后矩阵的和

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

示例 2:

LeetCode——查询后矩阵的和

 文章来源地址https://www.toymoban.com/news/detail-488395.html

输入: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、题目解读

题目要求我们通过 queries 数组的值进行操作,去改变 n*n矩阵,最后计算矩阵元素之和。

 queries[i] = [typei, indexi, vali]

遍历 queries数组:

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

我们可以进行queries数组倒序遍历,去进行修改矩阵,因为最先修改的操作可能是无用的操作,会被后面的操作覆盖,而最后面的操作基本上就不会被覆盖了。

示例1倒序过程:

LeetCode——查询后矩阵的和

 在倒序时,如果发现矩阵某位置已经被改变(怎么判断它已经被改变?如果修改的数就是0呢?)就不用修改该位置的值。

示例2倒序过程:

LeetCode——查询后矩阵的和

 上面提到使用什么来怎么判断它已经被改变?我们可以使用Set去判断记录标记是否已经修改,然后再进行是否需要更改。

然后直接计算矩阵和  +n - vis_col.size()*vali

3、代码

java:

class Solution {
    public long matrixSumQueries(int n, int[][] queries) {
        long ans = 0;
        Set<Integer> vis_row = new HashSet<>();
        Set<Integer> vis_col = new HashSet<>();
        for (int i = queries.length - 1; i >= 0; i--) {
            int type = queries[i][0], index = queries[i][1], val = queries[i][2];
            if (type==0){
                if (!vis_row.contains(index)){
                    ans+= (long) (n - vis_col.size()) *val;
                    vis_row.add(index);
                }
            }else {
                if (!vis_col.contains(index)){
                    ans+= (long) (n - vis_row.size()) *val;
                    vis_col.add(index);
                }
            }
        }
        return ans;
    }
}

 可能这样写不好看

class Solution {
     public long matrixSumQueries(int n, int[][] queries) {
        long ans = 0;
        Set<Integer>[] vis = new Set[]{new HashSet<>(), new HashSet<>()};
        for (int i = queries.length - 1; i >= 0; i--) {
            int type = queries[i][0], index = queries[i][1], val = queries[i][2];
            if(vis[0].size()==n&&vis[1].size()==n)
                break;
            if (!vis[type].contains(index)) { // 后面(>i)没有对这一行/列的操作
                // 这一行/列还剩下 n-vis[type^1].size() 个可以填入的格子
                ans += (long) (n - vis[type ^ 1].size()) * val;
                vis[type].add(index);
            }
        }
        return ans;
    }
}

 Python:

class Solution:
    def matrixSumQueries(self, n: int, queries: List[List[int]]) -> int:
        ans = 0
        vis_row = set()
        vis_col = set()
        for tp, index, val in reversed(queries):
            if tp == 0:
                if index not in vis_row:
                    ans += (n - len(vis_col)) * val
                    vis_row.add(index)
            else:
                if index not in vis_col:
                    ans += (n - len(vis_row)) * val
                    vis_col.add(index)
        return ans

  可能这样写不好看

class Solution:
    def matrixSumQueries(self, n: int, queries: List[List[int]]) -> int:
        ans = 0
        vis = [set(), set()]
        # 使用reserve方法不会有额外的空间开销
        for type, index, val in reversed(queries):
            if index not in vis[type]:  # 后面(>i)没有对这一行/列的操作
                # 这一行/列还剩下 n-len(vis[type^1]) 个可以填入的格子
                ans += (n - len(vis[type ^ 1])) * val
                vis[type].add(index)  # 标记操作过
        return ans

思路来源

LeetCode——查询后矩阵的和

 

 

到了这里,关于LeetCode——查询后矩阵的和的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LeetCode·每日一题·2679. 矩阵中的和·排序

    作者:小迅 链接:https://leetcode.cn/problems/sum-in-a-matrix/solutions/2330084/pai-xu-zhu-shi-chao-ji-xiang-xi-by-xun-g-a3gw/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。     题意 - 给定一个二维数组,每次取每一行的最大值构成一列,在该列

    2024年02月12日
    浏览(30)
  • ​LeetCode解法汇总1572. 矩阵对角线元素的和

    https://github.com/September26/java-algorithms 给你一个正方形矩阵  mat ,请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 示例  1:   示例  2: 示例 3: 提示: n == mat.length == mat[i].length 1 = n = 100 1 = mat[i][j] = 100  

    2024年02月13日
    浏览(21)
  • 【LeetCode每日一题】——1572.矩阵对角线元素的和

    矩阵 简单 1572.矩阵对角线元素的和 给你一个正方形矩阵 mat,请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 示例 1: 输入:mat = [[1,2,3],                      [4,5,6],                      [7,

    2024年02月14日
    浏览(34)
  • LeetCode_03Java_1572. 矩阵对角线元素的和

    给你一个正方形矩阵 mat,请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 示例二 示例三 代码实现

    2024年02月13日
    浏览(23)
  • 【LeetCode 算法】Matrix Diagonal Sum 矩阵对角线元素的和

    给你一个正方形矩阵 mat ,请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 n = = m a t . l e n g t h = = m a t [ i ] . l e n g t h 1 = n = 100 1 = m a t [ i ] [ j ] = 100 n == mat.length == mat[i].length\\\\ 1 = n = 100\\\\ 1 = mat[i][j] = 100 n == ma t . l

    2024年02月13日
    浏览(33)
  • LeetCode 2859.计算 K 置位下标对应元素的和:遍历(附Python一行代码版)

    力扣题目链接:https://leetcode.cn/problems/sum-of-values-at-indices-with-k-set-bits/ 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 请你用整数形式返回 nums 中的特定元素之 和 ,这些特定元素满足:其对应下标的二进制表示中恰存在 k 个置位。 整数的二进制表示中的 1 就是这个整

    2024年02月19日
    浏览(27)
  • 详解Leetcode中关于malloc模拟开辟二维数组问题,涉及二维数组的题目所给函数中的各个参数的解读

    最近博主一直再刷Leetcode上有关c语言的题目,有些题目第一步就将我卡死了。为什么呢?因为题目中所给的函数里的参数的具体含义我既然都不知道是什么意思。当然在请教了一些大佬后我也顺利解决了,不然也不会有人和你们分享了,哈哈哈~ 我就已一个典型的题目来介绍

    2024年02月08日
    浏览(30)
  • 【LeetCode题目详解】 977.有序数组的平方 209.长度最小的子数组59.螺旋矩阵II day2

    看完这个题目第一想法就是直接暴力解决,直接将全部平方然后进行排序。比如快排。 代码如下: 时间复杂度是 O(nlogn)或者说【O(n + nlogn)】,括号里面这个是为了比较接下来的方法。 然后看了代码随想录的视频学习了用双指针来写这道题的方法(说实话不看视频真没想到可

    2024年02月13日
    浏览(33)
  • Leetcode各种题型题目+思路+代码(共176道题及答案)

    文章目录 第一章:Leetcode 每日很多题 1、Leetcode-1047 删除字符串中的所有相邻重复项 2、剑指 Offer 53 - I. 在排序数组中查找数字 I 3、Leetcode704:二分查找 4、 Leetcode 227:基本计算器II 5、leetcode 224:基本计算器(带括号的计算) 6、Leetcode 15:三数之和:排序+双指针 7、剑指 offer 38

    2024年02月07日
    浏览(23)
  • python矩阵乘法全面解读,python矩阵乘法常用代码

      矩阵乘法,顾名思义是矩阵的乘法,矩阵相乘的含义是两个向量的积,在 Python中一般以乘号或括号表示。与常用的加、减、乘、除运算不同,矩阵乘法只能用于对给定矩阵进行乘法运算,不能进行除法运算。若要计算矩阵乘法的值,必须先进行矩阵分解。 在上一篇文章中

    2024年02月08日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包