做題記錄:和為K的子數組

來自leetcode 560
在這里插入圖片描述

前言

自己只會暴力,這里就是記錄一下前綴和+哈希表的做法,來自靈神的前綴和+哈希表:從兩次遍歷到一次遍歷,附變形題

正文

首先,這道題無法使用滑動窗口,因為滑動窗口需要滿足單調性,當右端點元素進入窗口時,窗口元素和是不能減少的。但是這道題中數組元素可以是負數,因此元素和可能會減少,不滿足單調性,所以無法使用滑動窗口。

暴力
比較容易想到的當然是暴力。兩個for循環,把所有的子數組的和都計算一遍,并判斷和是否為k。暴力直接超時。
在這里插入圖片描述

前綴和+哈希表
這里,靈神先給了兩數之和的優化思路【動畫】從兩數之和中,我們可以學到什么?,感覺對于理解這道題很有用。

設 i<j,如果 nums[i] 到 nums[j?1] 的元素和等于 k,用前綴和表示,就是
s[j]?s[i]=k。

枚舉 j,上式變成s[i]=s[j]?k。
對于問題【該數組中和為k的子數組的個數】,就可以變相理解為:
對于每個 s[j],分別計算有多少個 s[i] 滿足 i<j 且 s[i]=s[j]?k(已知 s[j] 和 k,統計 s[0] 到 s[j?1] 中有多少個數等于 s[j]?k),然后再將每個 s[j]計算得到的 s[i] 的個數相加就得到最終答案。

比如有例子:nums=[1,1,?1,1,?1], k=1,其前綴和 s=[0,1,2,1,2,1]。那么流程如下圖,對于每個s[j]判斷前面有幾個s[i]滿足s[i]=s[j]-k。
在這里插入圖片描述

而哈希表 cnt 的作用就是記錄已經遍歷過的s元素的個數,那么枚舉到 s[j] 時,從哈希表中就可以直接通過 cnt[s[j]?k]找到有幾個 s[i]。因此每次枚舉到s[j]后就把s[j]加入到哈希表中或更新s[j]的個數。

代碼如下,需要兩次遍歷,一次是構建前綴和,一次是遍歷前綴和:
在這里插入圖片描述
以下代碼只需要一次遍歷,一邊構建前綴和一邊遍歷:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74398.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74398.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74398.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

淺淺嘗試Numpy的函數:

1.numpy.empty: numpy.empty方法用來創建一個指定形狀&#xff08;shape&#xff09;&#xff0c;數據類型&#xff08;dtype&#xff09;且未被初始化的數組&#xff1a; numpy.empty(shape,dtype float,order C) 參數說明&#xff1a; shape:數組形狀。 dtype:數據類型&am…

IM基本設計思路與有序ID的重要性

文章目錄 概要問題解析思考問題數據基礎讀取寫入總結 概要 說起IM程序我們都不陌生&#xff0c;本篇文章我們就為如何實現一個IM做一個簡單的整體方案設計以及基本的數據結構 問題解析 我們先不上一大堆牛逼哄哄的中間件。 我們先從實現角度&#xff0c;來講講設計思路。 從…

數據結構學習

鏈表 單鏈表 頭插 將x插到下標是k的點后面 將下標是k的點后面的點刪掉 代碼 // head 表示頭結點的下標 // e[i] 表示節點i的值 // ne[i] 表示節點i的next指針是多少 // idx 存儲當前已經用到了哪個點// 初始化 void init() {head -1;idx 0; }// 將x插到頭結點 void add_to_…

0.DJI-PSDK開發準備及資料說明(基于DJI經緯M300RTK和M350RTK無人機上使用)

0.DJI-PSDK開發準備及資料說明&#xff08;基于DJI經緯M300RTK和M350RTK無人機上使用&#xff09; 【資料名稱】 DJI經緯M300RTK和M350RTK無人機二次開發資料包。資料包在最下方的百度網盤 一、引言 在進行大疆無人機負載開發的過程中&#xff0c;我整理出一系列有價值的資…

Linux內核TCP/IP協議棧中的設計模式:從面向對象到系統級軟件的跨界實踐

引言 設計模式(Design Patterns)自GoF(Gang of Four)在1994年提出以來,已成為軟件工程領域的核心概念。盡管其經典定義基于面向對象編程(OOP),但設計模式的本質是解決復雜問題的經驗總結,而非局限于特定編程范式。本文以Linux內核的TCP/IP協議棧為例,探討設計模式在…

第十四屆藍橋杯大賽軟件賽省賽C/C++ 大學 B 組(部分題解)

文章目錄 前言日期統計題意&#xff1a; 冶煉金屬題意&#xff1a; 島嶼個數題意&#xff1a; 子串簡寫題意&#xff1a; 整數刪除題意&#xff1a; 總結 前言 一年一度的&#x1f3c0;杯馬上就要開始了&#xff0c;為了取得更好的成績&#xff0c;好名字寫了下前年2023年藍橋…

處理JWT Token失效需求

JWT 本身是無狀態的&#xff0c;這意味著服務器不會保存任何關于 Token 的狀態信息。但為了支持 JWT 的狀態管理&#xff08;例如&#xff1a;強制使某些 Token 失效&#xff09;&#xff0c;可以借助 Redis 這樣的外部存儲來維護一個黑名單或白名單。 安裝必要的 NuGet 包 首…

PHP代碼審計-01

&#x1f338; 連接方式 PHP Mysql連接方式&#xff1a; Mysql&#xff08;廢棄&#xff09;MysqliPDO &#x1f338; 常見過濾 intval/addslashes/mysql_real_escape mysqli_escape_string/mysqli_real_escape_string/mysqli::escape_string PDO::quote 參數化查詢 a…

SpringKafka錯誤處理:重試機制與死信隊列

文章目錄 引言一、Spring Kafka錯誤處理基礎二、配置重試機制三、死信隊列實現四、特定異常的處理策略五、整合事務與錯誤處理總結 引言 在構建基于Kafka的消息系統時&#xff0c;錯誤處理是確保系統可靠性和穩定性的關鍵因素。即使設計再完善的系統&#xff0c;在運行過程中也…

藍橋杯2024JavaB組的一道真題的解析

文章目錄 1.問題描述2.問題描述3.思路分析4.代碼分析 1.問題描述 這個是我很久之前寫的一個題目&#xff0c;當時研究了這個題目好久&#xff0c;發布了一篇題解&#xff0c;后來很多人點贊&#xff0c;我都沒有意識到這個問題的嚴重性&#xff0c;我甚至都在懷疑自己&#xf…

性能比拼: Go標準庫 vs Python FastAPI(第二輪)

本內容是對知名性能評測博主 Anton Putra Python (FastAPI) vs Go (Golang) (Round 2) Performance Benchmark 內容的翻譯與整理, 有適當刪減, 相關指標和結論以原作為準 介紹 這是第二輪關于 FastAPI 和 Golang 的對比測試。我幾天前運行了前一次的基準測試&#xff0c;到目…

DeepSeek與ChatGPT的優勢對比:選擇合適的工具來提升工作效率

選DeepSeek還是ChatGPT&#xff1f;這就像問火鍋和披薩哪個香&#xff01; "到底該用DeepSeek還是ChatGPT?” 這個問題最近在互聯網圈吵翻天!其實這就跟選手機系統-樣&#xff0c;安卓黨iOS黨都能說出一萬條理由&#xff0c;但真正重要的是你拿它來干啥&#xff01;&am…

Python爬蟲第4節-請求庫urllib的request模塊使用

目錄 前言&#xff1a;基本庫urllib的使用 一、urlopen方法 二、Request類 三、高級用法 前言&#xff1a;基本庫urllib的使用 開始學習爬蟲時&#xff0c;第一步就是要模擬瀏覽器給服務器發送請求。這個時候&#xff0c;你可能會有很多問題&#xff1a;該從哪里開始做呢&a…

Vue3 Pinia Store使用示例

代碼示例&#xff1a; import { defineStore } from "pinia"; // 導入 Pinia 的 defineStore 方法 import { ref } from "vue"; // 導入 Vue 的響應式 API ref import { type Menu } from "/interface"; // 導入自定義的 Menu 類型/…

JavaScript逆向魔法:Chrome開發者工具探秘之旅

在前端開發和安全研究領域&#xff0c;JavaScript逆向工程是一項關鍵技能。它涉及分析和理解代碼的執行流程、數據結構和邏輯&#xff0c;以發現潛在的安全漏洞、提取核心算法或實現功能兼容。本文將結合Chrome開發者工具的調試功能&#xff0c;并通過具體示例幫助你更好地理解…

Qt基礎:資源文件

資源文件 1. 資源文件2. 資源文件創建 1. 資源文件 資源文件顧名思義就是一個存儲資源的文件&#xff0c;在Qt中引入資源文件好處在于他能提高應用程序的部署效率并且減少一些錯誤的發生。 在程序編譯過程中&#xff0c; 添加到資源文件中的文件也會以二進制的形式被打包到可執…

Agent TARS與Manus的正面競爭

Agent TARS 是 Manus 的直接競爭對手&#xff0c;兩者在 AI Agent 領域形成了顯著的技術與生態對抗。 一、技術架構與功能定位的競爭 集成化架構 vs 模塊化設計 Agent TARS 基于字節跳動的 UI-TARS 視覺語言模型&#xff0c;將視覺感知、推理、接地&#xff08;grounding&#…

使用ssh連接上開發板

最后我發現了問題&#xff0c;我忘記指定用戶名了&#xff0c;在mobaXterm上左上角打開會話&#xff0c;點擊ssh&#xff0c;然后輸入要連接的開發板主機的ip地址&#xff0c;關鍵在這里&#xff0c;要指定你要連接的開發板的系統中存在的用戶&#xff0c;因為通過ssh連接一個設…

【性能優化點滴】odygrd/quill在編譯期做了哪些優化

Quill 是一個高性能的 C 日志庫&#xff0c;它在編譯器層面進行了大量優化以確保極低的運行時開銷。以下是 Quill 在編譯器優化方面的關鍵技術和實現細節&#xff1a; 1. 編譯時字符串解析與格式校驗 Quill 在編譯時完成格式字符串的解析和校驗&#xff0c;避免運行時開銷&…

【數據結構】排序算法(中篇)·處理大數據的精妙

前引&#xff1a;在進入本篇文章之前&#xff0c;我們經常在使用某個應用時&#xff0c;會出現【商品名稱、最受歡迎、購買量】等等這些榜單&#xff0c;這里面就運用了我們的排序算法&#xff0c;作為剛學習數據結構的初學者&#xff0c;小編為各位完善了以下幾種排序算法&…