2718. 查询后矩阵的和

题目描述:

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

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

如果 typei == 0 ,将第 indexi 行的元素全部修改为 vali ,覆盖任何之前的值。
如果 typei == 1 ,将第 indexi 列的元素全部修改为 vali ,覆盖任何之前的值。
请你执行完所有查询以后,返回矩阵中所有整数的和。

示例 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 。

解题思路

这道题很巧妙,所以我决定把它分享出来。

这道题正常来讲,读完题第一反应就是直接暴力就能做,就改数呗,然后加和呗。

但是这有点太暴力了,那就优化一下,不改所有的数了,就改每一行的和和每一列的和呗,最后再统计一下总和。但这样似乎好像也不是很好实现。因为我们把每一行和每一列的和记录下来之后,最后算总和的时候是不太好计算的,因为后改变的会覆盖先改变的,所以我们还得知道行和列改变的顺序关系才行。

那考虑到这,注意到加粗的“顺序关系”了么,没错,这就是解题关键。

后改变的会覆盖先改变的,也就是说,我只需要从最后改变的开始往前遍历就行了,最后改变的一定是贡献给最终答案的,那先前改变的就没有作用了。所以无论是行还是列,我们都只关注他是不是最后改变的,我们从后往前遍历的话,也就是关注他是不是第一个出现的,如果是那就更新最终的答案的值,如果不是说明在这个操作后面有另一个操作把它覆盖了,这个操作不起作用。

代码

class Solution {
public:long long matrixSumQueries(int n, vector<vector<int>>& queries) {long long int ans = 0;unordered_set<int> vis[2]; //0表示行是否被修改,1表示列是否被修改int m = queries.size();for(int i = m - 1 ; i >= 0 ; i--){auto &q = queries[i];int type = q[0] , index = q[1] , val = q[2];if(!vis[type].count(index)){//如果该行/列没有被修改过ans += (long long int)(n-vis[type^1].size())*val;//更新答案,该行/列首次发生改变的数要加到最终答案里vis[type].insert(index);//标记该行/列已经被修改过}}return ans;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/45317.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java-数据结构基础

栈结构 : 先进后出 队列结构 : 先进先出 数组结构 : 查询快 , 增删慢 链表结构 : 查询慢 , 增删快 二叉树 二叉树 : 每个节点最多有两个子节点 二茬查找树 : 每个节点的左子节点比当前节点小 , 右子节点比当前节点大 二茬平衡树 : 在查找树的基础上, 每个节点左右子树的高…

Django ORM中的Q对象

Q 对象在 Django ORM 中用于构建复杂的查询条件&#xff0c;特别是当你需要使用逻辑运算符&#xff08;如 AND、OR、NOT&#xff09;时。以下是一些使用 Q 对象进行复杂查询的实际例子。 Q对象使用 模型 假设我们有一个包含员工信息的模型 Employee&#xff1a; from djang…

一个引发openssl崩溃问题案例

1 背景 最近用libevent写了一个https代理功能&#xff0c;在调研的时候&#xff0c;遇到了一个项目用到了本地多个openssl库引发的ssl握手崩溃问题。 2 开发环境 项目库版本号依赖项libeventlibevent-2.1.8-stableopenssl 1.1openssl1.0u / 1.1.1w / 3.3.1...... 3 问题现象…

Python酷库之旅-第三方库Pandas(024)

目录 一、用法精讲 61、pandas.to_numeric函数 61-1、语法 61-2、参数 61-3、功能 61-4、返回值 61-5、说明 61-6、用法 61-6-1、数据准备 61-6-2、代码示例 61-6-3、结果输出 62、pandas.to_datetime函数 62-1、语法 62-2、参数 62-3、功能 62-4、返回值 62-…

关于SQLException: Illegal mix of collations (`utf8mb4_general_ci,IMPLICIT`)...错误

希望文章能给到你启发和灵感&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏 支持一下博主吧&#xff5e; 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、报错信息三、最后 开篇说明 记录一个查询错误 场景&#xff1a;数据库之间某表复…

旷野之间 16 – AI 代理、AI 代理基础设施、平台和比较

在本文中&#xff0c;我们将研究 AI 代理、AI 代理基础设施、市场上最流行的 AI 代理平台、它们的比较以及 AI 代理的未来 我们将按以下顺序讨论这些主题 1. 关于人工智能代理 2. 人工智能代理在行业中的应用 3. AI代理基础设施 4. 最受欢迎的 AI 代理平台及比较 5.您将如…

【笔记】nginx命令

查看 启动 通过./nginx启动nginx之后 可以在虚拟机中进入/usr/local/nginx/html 去查看cat index.html 也就是此页面的源代码 进入vim /etc/profile 配置完之后保存退出 source /etc/profile 手动重载资源 随后就可以在任意位置重载资源了 nginx -s reload 部署静态资源就把静…

两项国际设计奖,支持双设备—悠律Ringbuds pro开放式蓝牙耳机体验

在音频设备领域&#xff0c;开放式耳机对比入耳式耳机的优势就是既能听到耳机内的声音又能感知环境音&#xff0c;很适合在户外以及办公时使用&#xff0c;今天分享一款新品牌悠律UMELODY——悠律凝声环Ringbuds pro&#xff0c;它采用气传导耳挂式设计&#xff0c;佩戴舒适、安…

【人工智能】 知识表示与推理(八数码 + 传教士与野人渡河)

目录 一、八数码难题 1. 需求分析 2. 数据结构、功能模块设计与说明 2.1 算法思路 2.2 数据结构 3. 核心代码与测试结果说明 3.1 核心代码 3.2 测试结果说明 4. 存在的问题与体会 4.1 存在的问题 4.2 体会 二、传教士与野人渡河 1. 需求分析 2. 数据结构、功能模…

基于EMQX+Flask+InfluxDB+Grafana打造多协议物联网云平台:MQTT/HTTP设备接入与数据可视化流程(附代码示例)

摘要: 本文深入浅出地介绍了物联网、云平台、MQTT、HTTP、数据可视化等核心概念&#xff0c;并结合 EMQX、Flask、InfluxDB、Grafana 等主流工具&#xff0c;手把手教你搭建一个支持多协议的物联网云平台。文章结构清晰&#xff0c;图文并茂&#xff0c;代码翔实易懂&#xff0…

2024-07-14 Unity插件 Odin Inspector1 —— 插件介绍

文章目录 1 介绍2 模块3 学习目的 1 介绍 ​ Odin Inspector 是 Unity 的一个插件&#xff0c;拥有强大、自定义和用户友好的编辑器&#xff0c;而无需编写任何自定义编辑器代码&#xff0c;使得编程过程中的数据可视化更容易实现。 ​ 具体功能包括&#xff1a; 更舒适美观…

软件设计师(中级)备考视频教程

一、视频介绍 本视频主要包括软件设计师系统学习教程&#xff0c;通过学习本视频&#xff0c;可以帮助考生高效且深入地掌握软件设计师资格考试核心知识&#xff0c;全方位覆盖考试要点&#xff0c;从而轻松备战考试。视频不仅涵盖了考试所需的全面知识体系&#xff0c;还通过直…

Linux--USB驱动开发(二)插入USB后的内核执行程序

一、USB总线驱动程序的作用 a&#xff09;识别USB设备 1.1 分配地址 1.2 并告诉USB设备(set address) 1.3 发出命令获取描述符 b&#xff09;查找并安装对应的设备驱动程序 c&#xff09;提供USB读写函数 二、USB设备工作流程 由于内核自带了USB驱动,所以我们先插入一个U…

Google Colab 云端硬盘路径读取

加载云端硬盘 需要在左上角点击这个文件图标&#xff1b; from google.colab import drive drive.mount("/content/drive") # 挂载云端硬盘import os path"/content/drive/MyDrive/TextClassificationCustom" os.chdir(path) # 以路径path作为当前工作目…

在 SwiftUI 中的作用域动画

文章目录 前言简单示例动画视图修饰符使用多个可动画属性使用 ViewBuilder总结 前言 从一开始&#xff0c;动画就是 SwiftUI 最强大的功能之一。你可以在 SwiftUI 中快速构建流畅的动画。唯一的缺点是每当我们需要运行多步动画或将动画范围限定到视图层次结构的特定部分时&…

docker emqx 配置密码和禁用匿名连接

mqtt版本emqx/emqx:4.4.3 1.首先把镜像内目录/opt/emqx/etc拷贝到本地 2.做映射 3.allow_anonymous&#xff0c; false改成true 4. 5.MQTTX连不上的话看看下图的有没有打开

【nginx】nginx的优点

目录 一、高性能1.1 高并发处理1.2 低内存消耗1.3 快速响应 二、高扩展性2.1 模块化设计2.2 动态模块扩展 三、高可靠性3.1 核心框架稳定3.2 进程管理3.3 负载均衡与健康检查3.4 热部署 四、功能丰富4.1 反向代理4.2 HTTP缓存4.3 安全功能 五、易于配置和管理5.1 配置文件简单5…

windows下环境变量开启方式

第一种方法&#xff1a; 使用快捷键打开“运行”对话框&#xff1a;按下 Win R 组合键&#xff0c;这将打开“运行”窗口。 输入系统属性命令&#xff1a;在“运行”窗口中输入 sysdm.cpl 然后按回车键。这将打开“系统属性”对话框。【sysdm.cpl是"System Data Manager…

【Go系列】Go的指针

承上启下 我们在前面的文章中&#xff0c;首先介绍了GO的基础语法&#xff0c;然后介绍了Goroutine和channel这个最具有特色的东西&#xff0c;同时介绍了Sync和context&#xff0c;以及在上篇文章中详细距离说明了Go里面用于高并发的多种写法。基础的使用方法也告一段落了&…

Linux多线程编程-哲学家就餐问题详解与实现(C语言)

在哲学家就餐问题中&#xff0c;假设有五位哲学家围坐在圆桌前&#xff0c;每位哲学家需要进行思考和进餐两种活动。他们的思考不需要任何资源&#xff0c;但进餐需要使用两根筷子&#xff08;左右两侧各一根&#xff09;。筷子是共享资源&#xff0c;哲学家们在进行进餐时需要…