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.pswp.cn/web/45317.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45317.shtml
英文地址,請注明出處:http://en.pswp.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;哲學家們在進行進餐時需要…