当前位置: 首页 > news >正文

查询后矩阵的和

说在前面

🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。

问题描述

给你一个整数 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 。

提示:

  • 1 <= n <= 10^4
  • 1 <= queries.length <= 5 * 10^4
  • queries[i].length == 3
  • 0 <= typei <= 1
  • 0 <= indexi < n
  • 0 <= vali <= 10^5

思路分析

首先我们应该要先理解一下题目意思,题目会给我们一个整数 n 和一个下标从 0 开始的 二维数组 queries ,n表示我们有一个下标从 0 开始的 n x n 矩阵,所有元素均为 0queries表示有若干个查询,其中 queries[i] = [typei, indexi, vali],每一个查询,我们需要执行以下操作之一:

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

我们要计算执行完所有查询以后,矩阵中所有整数的和。

这里有一个关键的点,就是每一个修改都会覆盖任何之前的值,也就是说有重复修改的话,生效的只会是最后修改的那一次。所以我们可以换个思路来想,如果我们将queries的顺序倒过来查询的话,那么生效的只会是第一次操作的那一次,这样的话我们可以再修改的时候判断一下当前行或列还有多少是没有被操作过的,填上没操作过的坑位即可。

  • 1、使用两个set分别记录被操作过的行和列

因为我们是逆序来操作,所以生效的只会是第一次操作,我们需要记录被操作过的行和列.

const colSet = new Set(),rowSet = new Set();
  • 2、修改行元素

如果 typei == 0 ,将第 indexi 行的元素全部修改为 vali ,覆盖任何之前的值,能增加的数值为当前行中未被修改过的元素 * vali.

if(type == 0){if(!colSet.has(index)){res += (n - rowSet.size) * val;colSet.add(index);}
}
  • 3、修改列元素

如果 typei == 1 ,将第 indexi 列的元素全部修改为 vali ,覆盖任何之前的值,能增加的数值为当前列中未被修改过的元素 * vali

if(type == 1){if(!rowSet.has(index)){res += (n - colSet.size) * val;rowSet.add(index);}
}

AC 代码

完整 AC 代码如下:

/*** @param {number} n* @param {number[][]} queries* @return {number}*/
var matrixSumQueries = function(n, queries) {let res = 0;const colSet = new Set(),rowSet = new Set();for(let i = queries.length - 1; i >= 0; i--){const [type,index,val] = queries[i];if(type == 0){if(!colSet.has(index)){res += (n - rowSet.size) * val;colSet.add(index);}}else{if(!rowSet.has(index)){res += (n - colSet.size) * val;rowSet.add(index);}}}return res;
};

公众号

关注公众号『前端也能这么有趣』,获取更多有趣内容。

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

相关文章:

查询后矩阵的和

说在前面 &#x1f388;不知道大家对于算法的学习是一个怎样的心态呢&#xff1f;为了面试还是因为兴趣&#xff1f;不管是出于什么原因&#xff0c;算法学习需要持续保持。 问题描述 给你一个整数 n 和一个下标从 0 开始的 二维数组 queries &#xff0c;其中 queries[i] [t…...

Flutter实现丝滑的滑动删除、移动排序等-Dismissible控件详解

文章目录 Dismissible 简介使用场景常用属性基本用法举例注意事项 Dismissible 简介 Dismissible 是 Flutter 中用于实现可滑动删除或拖拽操作的一个有用的小部件。主要用于在用户对列表项或任何其他可滑动的元素执行删除或拖动操作时&#xff0c;提供一种简便的实现方式。 使…...

JDK bug:ciObjectFactory::create_new_metadata:原因完全解析

文章目录 1、问题2.详细日志2.关键日志3.结论4.JDK&#xff1a;bug最终bug链接&#xff1a; 京东遇到过类似bug各位大佬如果有更详细的解答可以留言。 1、问题 服务不通&#xff0c;接口404&#xff0c;查看日志有一下截图&#xff0c;还有一个更详细的日志 2.详细日志 # #…...

【数据结构】并查集的简单实现,合并,查找(C++)

文章目录 前言举例&#xff1a; 一、1.构造函数2.查找元素属于哪个集合FindRoot3.将两个集合归并成一个集合Union4.查找集合数量SetCount 二、源码 前言 需要将n个不同的元素划分成一些不相交的集合。开始时&#xff0c;每个元素自成一个单元素集合&#xff0c;然后按一定的规…...

2023美团商家信息

2023美团商家电话、地址、经纬度、评分、均价、执照......

0155 - Java 数组

1 数组介绍 数组可以存放多个同一类型的数据。数组也是一种数据类型&#xff0c;是引用类型。 即&#xff1a;数(数据)组(一组)就是一组数据 2 数组的使用 2.1 使用方式一 2.2 使用方式二 3 数组使用注意事项和细节 数组是多个相同类型数据的组合&#xff0c;实现对这些数据…...

Java 语言有哪些特点

Java语言具有以下特点&#xff1a; 简单易学&#xff1a;Java语法相对简单&#xff0c;与C相比更容易上手。 面向对象&#xff1a;Java是一门纯粹的面向对象编程语言&#xff0c;支持封装、继承和多态等面向对象的特性。 平台无关性&#xff1a;Java程序可以在不同的操作系统…...

SAP 特殊采购类50简介----虚拟件

今天我们测试一下特殊类50,也就是我们常说的虚拟件。 虚拟物料是库存中实际不存在的物料清单(BOM)的子装配件,它用于简化物料清单。尽管虚拟物料出现在物料清单中,但生产订单显示制造虚拟物料所需的组件,而不是虚拟物料本身。 我们举个列子,生产的手机是有包装的,有盒子…...

C语言——内存函数的使用与模拟实现

大家好&#xff0c;我是残念&#xff0c;希望在你看完之后&#xff0c;能对你有所帮助&#xff0c;有什么不足请指正&#xff01;共同学习交流 本文由&#xff1a;残念ing 原创CSDN首发&#xff0c;如需要转载请通知 个人主页&#xff1a;残念ing-CSDN博客&#xff0c;欢迎各位…...

Mysql索引事务(面试高频)

文章目录 目录 文章目录 前言 一 . 索引 1.1 概念 1.2 作用 1.3 使用场景 1.4 存储引擎 二 . 事务 2.1 事务的概念 2.2 事务四大特性 前言 大家好,今天给大家绍一下mysql索引和事务 一 . 索引 1.1 概念 索引是一种特殊的文件,包含着对数据表中的所有记录的引用指针…...

SpringCloudGateway 3.1.4版本 Netty内存泄漏问题解决

一、 产生的异常 当时是服务器访问不到服务了&#xff0c;上去一看&#xff0c;无法申请资源OutOfDirectMemoryError了&#xff0c;内存级别的东西让人一阵头大&#xff0c;赶紧在线下模拟&#xff0c; 1. 减少分配的堆外内存&#xff0c;打开Netty的监测工具等有助于复现的…...

STM32内部是怎么工作的

STM32是怎么工作的 1 从孩子他妈说起2 早期计算机的组成2.1 五大元件&#xff08;1&#xff09;第一个出场的是电容元件&#xff08;2&#xff09;第二个出场的是二极管&#xff08;3&#xff09;第三个出场的是电阻元件&#xff08;4&#xff09;第四个出场的是电感&#xff0…...

MyBatis的配置文件

目录 MyBatis配置 1.properties标签 2.typeAliases标签 3.Mappers标签 一个最全面的MyBatis配置文件可能会包含各种不同的设置和选项&#xff0c;根据实际情况&#xff0c;可以根据需要添加或删除配置。以下是一个包含各种可能设置的示例。 这个配置文件包含了环境设置、数…...

MCU平台下确定栈空间大小的方法

本文介绍MCU平台下确定栈空间大小的方法。 通常使用IDE开发MCU程序在生成Image文件时&#xff0c;Image文件被划分为代码区&#xff0c;数据区&#xff0c;BSS区&#xff0c;堆区&#xff0c;栈区。其中&#xff0c;代码区&#xff0c;数据区&#xff0c;BSS区空间大小由编译器…...

Flink系列之:SQL提示

Flink系列之&#xff1a;SQL提示 一、动态表选项二、语法三、例子四、查询提示五、句法六、加入提示七、播送八、随机散列九、随机合并十、嵌套循环十一、LOOKUP十二、进一步说明十三、故障排除十四、连接提示中的冲突案例十五、什么是查询块 SQL 提示可以与 SQL 语句一起使用来…...

机器学习算法---聚类

类别内容导航机器学习机器学习算法应用场景与评价指标机器学习算法—分类机器学习算法—回归机器学习算法—聚类机器学习算法—异常检测机器学习算法—时间序列数据可视化数据可视化—折线图数据可视化—箱线图数据可视化—柱状图数据可视化—饼图、环形图、雷达图统计学检验箱…...

gitlab ci pages

参考文章 gitlab pages是什么 一个可以利用gitlab的域名和项目部署自己静态网站的机制 开启 到gitlab的如下页面 通过gitlab.ci部署项目的静态网站 # build ruby 1/3: # stage: build # script: # - echo "ruby1"# build ruby 2/3: # stage: build …...

Web ML 库的Transformers.js 提供文本转语音功能

JavaScript 库 Transformers.js 提供了类似 Python Transformers 库的功能&#xff0c;设计用于在 Web 浏览器中直接运行 Transformer 模型&#xff0c;而不再需要外部服务器参与处理。在最新的 2.7 版本中&#xff0c;Transformers.js 引入了增强功能&#xff0c;其中包括文本…...

管理类联考——数学——真题篇——按题型分类——充分性判断题——蒙猜E

老老规矩&#xff0c;看目录&#xff0c;平均每年2E&#xff0c;跟2D一样&#xff0c;D是全对&#xff0c;E是全错&#xff0c;侧面也看出10道题&#xff0c;大概是3A/B&#xff0c;3C&#xff0c;2D&#xff0c;2E&#xff0c;其实还是蛮平均的。但E为1道的情况居多。 第20题…...

【Linux基本指令(2)】

文章目录 一. 基本指令第二回 一. 基本指令第二回 cp指令语法 cp src dst 将目标文件或者目录拷贝到指定目录下或文件下。注意同级目录下&#xff0c;不允许存在同名文件或同名目录。如果将一个file.txt文件拷贝到当前目录下&#xff0c;就重名了&#xff0c;报错cp不了&#…...

ctf show web入门54

这道题目是 ctf.show 中典型的 命令执行&#xff08;RCE&#xff09;绕过 题。虽然看起来过滤非常严密&#xff0c;但只要理清了它的过滤规则&#xff0c;就能找到生存空间。过滤规则拆解 代码通过 preg_match 过滤了以下内容&#xff08;/i 表示不区分大小写&#xff09;&…...

在自动化客服场景中利用Taotoken实现多模型智能路由

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在自动化客服场景中利用Taotoken实现多模型智能路由 对于构建智能客服系统的产品团队而言&#xff0c;核心挑战之一是如何在保证服…...

4. 打破ASR技术瓶颈:Whisper-1模型原理、性能与落地实践

1. 引言 语音识别&#xff08;Automatic Speech Recognition, ASR&#xff09;是人工智能领域的核心技术方向之一&#xff0c;其历史可追溯至20世纪50年代贝尔实验室的Audrey系统——这一仅能识别10个英文数字的早期系统&#xff0c;标志着机器理解人类语音的开端。此后半个多…...

解放双手:D3KeyHelper让暗黑3游戏操作变得前所未有的简单

解放双手&#xff1a;D3KeyHelper让暗黑3游戏操作变得前所未有的简单 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 还在为暗黑3中繁琐的技能循环和…...

基于Vike+React+Mantine构建现代文档站:架构解析与工程实践

1. 项目概述&#xff1a;从零构建 SurrealDB 官方文档站的技术选型与架构最近在梳理 SurrealDB 官方文档站&#xff08;docs.surrealdb.com&#xff09;的源码&#xff0c;发现它是一个非常典型的现代技术栈组合案例。项目基于 Vike React Mantine 构建&#xff0c;并集成了 …...

想转行AI?大模型4大热门方向深度解构!小白也能收藏的进阶指南

AI大模型领域岗位需求激增&#xff0c;人才缺口超500万。本文深度解析大模型4大热门方向&#xff1a;算法研发与模型预训练&#xff08;门槛高&#xff0c;偏研究&#xff09;、模型对齐与后训练优化&#xff08;岗位增长快&#xff0c;数据驱动&#xff09;、推理工程与模型部…...

IP核验证责任共担模型:从授权方到被授权方的实践策略

1. IP核验证的责任边界&#xff1a;一场持续多年的行业对话在SoC设计领域&#xff0c;IP核的集成与验证从来都不是一个轻松的话题。随着芯片设计复杂度的指数级增长&#xff0c;一个现代SoC中可能集成了数十甚至上百个来自不同供应商的IP核&#xff0c;从处理器、内存控制器到各…...

EDA验证与调试:从学术理论到工业落地的核心挑战与自动化未来

1. 从互联网先驱到EDA专家&#xff1a;Andreas Veneris的跨界之路在半导体设计这个高度专业化的领域&#xff0c;Andreas Veneris的经历显得格外独特。他既是多伦多大学电气与计算机工程及计算机科学系的教授&#xff0c;又是EDA&#xff08;电子设计自动化&#xff09;公司Ven…...

地铁站内人员危险情况检测人员跌倒检测数据集VOC+YOLO格式4369张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4369 标注数量(xml文件个数)&#xff1a;4369 标注数量(txt文件个数)&#xff1a;4369 …...

探索Windows平台智能PPT演示计时器的实现与实践

探索Windows平台智能PPT演示计时器的实现与实践 【免费下载链接】ppttimer 一个简易的 PPT 计时器 项目地址: https://gitcode.com/gh_mirrors/pp/ppttimer 在技术分享或学术汇报场景中&#xff0c;时间管理常常成为影响演示效果的关键因素。演讲者需要同时关注内容表达…...