560. 和為 K 的子數組 - 前綴和思想

560. 和為 K 的子數組 - 前綴和思想

在算法題中,前綴和是一種能快速計算 “數組中某段連續元素之和” 的預處理方法,核心思路是 “提前計算并存儲中間結果,避免重復計算”

前綴和的定義:

對于一個數組 nums,我們可以創建一個 “前綴和數組” prefix,其中 prefix[i] 表示 “數組 nums 中前 i 個元素的和”(注意:這里的 “前 i 個” 通常從第 1 個元素開始算)。
以上面的步數數組為例:

  • prefix[0] = 0(約定的初始值,方便計算)
  • prefix[1] = 第1天步數 = 3
  • prefix[2] = 第1天 + 第2天 = 3 + 1 = 4
  • prefix[3] = 第1天 + 第2天 + 第3天 = 3 + 1 + 4 = 8
  • prefix[4] = 前4天總和 = 3 + 1 + 4 + 2 = 10
  • prefix[5] = 前5天總和 = 3 + 1 + 4 + 2 + 5 = 15

所以前綴和數組是 [0, 3, 4, 8, 10, 15]。
前綴和的妙用:快速算 “區間和”有了前綴和數組,計算 “從第 l 天到第 r 天的總步數” 時,直接用:
區間和 = prefix [r] - prefix [l-1]

比如:

  • 第 2 天到第 4 天:l=2,r=4 → prefix[4] - prefix[1] = 10 - 3 = 7(和之前手動算的一致)
  • 第 1 天到第 3 天:l=1,r=3 → prefix[3] - prefix[0] = 8 - 0 = 8(正確)

題目描述

https://leetcode.cn/problems/subarray-sum-equals-k/description/?envType=study-plan-v2&envId=top-100-liked

給你一個整數數組 nums 和一個整數 k ,請你統計并返回 該數組中和為 k 的子數組的個數 。
子數組是數組中元素的連續非空序列。示例 1:
輸入:nums = [1,1,1], k = 2輸出:2
示例 2:
輸入:nums = [1,2,3], k = 3輸出:2提示:
1 <= nums.length <= 2 * 104
-1000 <= nums[i] <= 1000
-107 <= k <= 107

題解

class Solution {public int subarraySum(int[] nums, int k) {int len  = nums.length;int preSum = 0; // 存儲前綴和HashMap<Integer,Integer> map = new HashMap(); // 用來存儲前綴和出現的次數map.put(0,1); // 初始化// 若某一個前綴和preSum恰好等于k,此時preSum - k = 0,能直接匹配到初始值 1。int res = 0;for(int x: nums){preSum += x; // 計算前綴和/*假設當前前綴和是preSum(對應數組前 i 個元素的和)我們要找 “和為 k 的子數組”,也就是找兩個前綴和 preSum[i] 和 preSum[j](j < i),使得:preSum[i] - preSum[j] = k變形后就是:preSum[j] = preSum[i] - k需要找到之前preSum[j]出現過幾次,那么就有幾個子數組和為k*/res += map.getOrDefault(preSum - k, 0);// 更新前綴和出現的次數map.put(preSum, map.getOrDefault(preSum, 0) + 1);}return res;}
}

核心問題:如何用前綴和表示 “子數組的和”?

任意一個子數組的和,都可以表示為 “兩個前綴和的差”。
比如:

  • 子數組 [1](索引 1)的和 = 1對應:preSum[2] - preSum[1] = 3 - 2 = 1
  • 子數組 [3](索引 2)的和 = 3對應:preSum[3] - preSum[2] = 6 - 3 = 3
  • 子數組 [2,1](索引 0-1)的和 = 3對應:preSum[2] - preSum[0] = 3 - 0 = 3

關鍵邏輯:“子數組和為 k” 等價于什么?

我們要找 “和為 k 的子數組”,也就是找兩個前綴和 preSum[i] 和 preSum[j](j < i),使得:
preSum[i] - preSum[j] = k
變形后就是:
preSum[j] = preSum[i] - k
這句話的意思是:如果當前的前綴和是 preSum[i],那么只要之前出現過等于 preSum[i] - k 的前綴和(記為 preSum[j]),那么子數組 nums[j…i-1] 的和就一定是 k。

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

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

相關文章

Python金融分析:從基礎到量化交易的完整指南

Python金融分析:從基礎到量化交易的完整指南 引言:Python在金融領域的核心地位 在量化投資規模突破5萬億美元的2025年,Python已成為金融分析的核心工具: 數據處理效率:Pandas處理百萬行金融數據僅需2.3秒 策略回測速度:Backtrader框架使策略驗證效率提升17倍 風險評估精…

MySQL 從入門到實戰:全方位指南(附 Java 操作示例)

MySQL 入門全方位指南&#xff08;附Java操作示例&#xff09; MySQL 作為最流行的關系型數據庫之一&#xff0c;廣泛應用于各類應用開發中。本文將從安裝開始&#xff0c;逐步講解 MySQL 的核心知識點與操作技巧&#xff0c;并通過 Java 示例展示客戶端交互&#xff0c;幫助你…

從低空感知邁向智能協同網絡:構建智能空域的“視頻基礎設施”

?? 引言&#xff1a;低空經濟起飛&#xff0c;智能視覺鏈路成剛需基建 隨著政策逐步開放與技術加速成熟&#xff0c;低空經濟正從概念走向全面起飛。從載人 eVTOL 到物流無人機&#xff0c;從空中巡檢機器人到城市立體交通調度平臺&#xff0c;低空場景正在成為繼地面交通和…

Node.js- express的基本使用

Express 核心概念? Express是基于Node.js的輕量級Web框架&#xff0c;封裝了HTTP服務、路由管理、中間件等核心功能&#xff0c;簡化了Web應用和API開發 核心優勢?? 中間件架構&#xff1a;支持模塊化請求處理流程路由系統&#xff1a;直觀的URL到處理函數的映射高性能&…

計算機網絡:網絡號和網絡地址的區別

在計算機網絡中&#xff0c;“網絡號”和“網絡地址”是兩個密切相關但含義不同的概念&#xff0c;主要用于IP地址的劃分和網絡標識。以下從定義、作用、關聯與區別等方面詳細說明&#xff1a; 1. 網絡號&#xff08;Network Number&#xff09;定義&#xff1a;網絡號是IP地址…

【iOS】3GShare仿寫

【iOS】3GShare仿寫 文章目錄【iOS】3GShare仿寫登陸注冊界面主頁搜索文章活動我的總結登陸注冊界面 這個界面的ui東西不多&#xff0c;主要就是幾個輸入框及對輸入內容的一些判斷 登陸界面 //這里設置了一個初始密碼并儲存到NSUserDefaults中 NSUserDefaults *defaults [N…

從案例學習cuda編程——線程模型和顯存模型

1. cuda介紹CUDA&#xff08;Compute Unified Device Architecture&#xff0c;統一計算設備架構&#xff09;是NVIDIA推出的一種并行計算平臺和編程模型。它允許開發者利用NVIDIA GPU的強大計算能力來加速計算密集型任務。CUDA通過提供一套專門的API和編程接口&#xff0c;使得…

進階向:YOLOv11模型輕量化

YOLOv11模型輕量化詳解:從理論到實踐 引言 YOLO(You Only Look Once)系列模型因其高效的實時檢測能力而廣受歡迎。YOLOv11作為該系列的最新演進版本,在精度和速度上均有顯著提升。然而,原始模型對計算資源的需求較高,難以在邊緣設備或移動端部署。輕量化技術通過減少模…

2025-08 安卓開發面試拷打記錄(面試題)

想跑路了&#xff0c;開始學八股&#xff0c;幾個主動找的大廠試了下水&#xff0c;后續看情況更新。樓主一年經驗&#xff0c;學的c被騙來干安卓&#xff0c;雙非本科。2025-07-31 小鵬匯天 安卓開發一面synchronizedhandler視圖刷新binderjvm垃圾回收內存泄漏排查glide緩…

風丘助力混合動力汽車工況測試:精準采集整車信號解決方案

一、背景 混合動力汽車是介于純電動汽車與燃油汽車兩者之間的一種新能源汽車。它既包含純電動汽車無污染、啟動快的優勢&#xff0c;又擁有燃油車續航便捷、不受電池容量限制的特點。在當前環境下&#xff0c;混合動力汽車比純電動汽車更符合目前的市場需求。 然而&#xff…

??MCU程序的存儲方式與存儲區域大小要求?

程序的段的存儲方式與存儲區域大小要求 程序的存儲和運行涉及 ROM&#xff08;Flash/非易失性存儲器&#xff09; 和 RAM&#xff08;易失性存儲器&#xff09; 的分配&#xff0c;不同段在存儲和運行時具有不同的特性。以下是詳細的分類和計算方式&#xff1a;1. 程序文件的存…

Lesson 31 Success story

Lesson 31 Success story 詞匯 retire v.退休,退役[運動]去睡覺 構成:re-表示重復 tire v.感到累一tried a.累的 tyre n.輪胎 用法:retire from 單位 從…退休(過去時) 例句:他從學校退休了。 He retired from our school. retire例句: 1.他越來越老了&#xff0c;他即將退休。…

2025年8月4日私魚創作平臺v1.0.4公測版更新發布-完成大部分功能包含關注創作者以及發布作品及合集功能優雅草科技

2025年8月4日私魚創作平臺v1.0.4公測版更新發布-完成大部分功能包含關注創作者以及發布作品及合集功能優雅草科技 鯨魚小說分銷系統介紹 優雅草私魚創作系統——產品介紹 系統概述 優雅草私魚創作系統&#xff08;簡稱“私魚”&#xff09;是一款專注于私域流量運營的垂直化…

鷓鴣云:光伏電站的“智慧中樞”,精準調控逆變器

光伏電站如星辰散落于大地&#xff0c;那些默默工作的逆變器便是每一處光芒的關鍵心臟。然而&#xff0c;分布廣袤、設備眾多&#xff0c;傳統運維如盲人摸象&#xff0c;效率低下&#xff0c;故障難尋&#xff0c;白白流失寶貴電能。鷓鴣云光伏運維軟件應時而生&#xff0c;它…

java中Reflection反射(一)

目錄 一、概述 二、class類&#xff1a; 1、獲取類的字節碼文件&#xff1a; &#xff08;1&#xff09;方式一&#xff1a;直接通過一個class的靜態變量class獲取 &#xff08;2&#xff09;方式二&#xff1a;如果知道一個class的完整類名&#xff0c;可以通過靜態方法Cl…

CVE-2021-1879

一、漏洞原理 CVE-2021-1879 是 IBM WebSphere Application Server 中存在的一個 路徑遍歷&#xff08;Path Traversal&#xff09; 漏洞&#xff0c;其核心原理為&#xff1a; ①WebSphere 在處理某些文件操作請求&#xff08;如下載、上傳或配置文件讀取&#xff09;時&#…

二進制簽名查找器(Aho-Corasick 自動機):設計思路與實現原理(C/C++代碼實現)

在逆向工程、惡意軟件分析和二進制文件解析領域&#xff0c;快速準確地識別特定字節模式&#xff08;即“簽名”&#xff09;是一項核心任務。本文將圍繞一款基于PE-bear工具的二進制簽名查找器&#xff0c;深入解析其設計思路、實現原理及相關技術背景&#xff0c;揭示其如何高…

後端開發技術教學(二) 條件指令、循環結構、定義函數

書接上回&#xff1a;後端開發技術教學(一) [附2025最新可用 phpstudy2018下載鏈接] -CSDN博客 必要資源&#xff1a; trae中文版下載網址: TRAE - The Real AI Engineer phpStudy 2018 : phpStudy - Windows 一鍵部署 PHP 開發環境 小皮出品 目錄 一、條件指令 1.1 if() …

狀壓DP-基本框架

狀壓DP-基本框架一、狀壓DP的核心思想與適用場景1.1 問題特征1.2 核心思想1.3 與傳統DP的對比二、位運算基礎&#xff1a;狀壓DP的語法三、狀壓DP的基本框架3.1 步驟拆解3.2 通用代碼模板四、經典案例詳解4.1 旅行商問題&#xff08;TSP&#xff09;問題描述狀壓DP設計代碼實現…

Web 端 AI 圖像生成技術的應用與創新:虛擬背景與創意圖像合成

隨著 Stable Diffusion、Midjourney 等生成式 AI 模型的爆發,Web 端圖像生成技術從“實驗室demo”走向“工業化應用”。其中,虛擬背景替換(如視頻會議的動態背景生成)和創意圖像合成(如用戶上傳素材與 AI 生成元素的融合)成為最具代表性的場景,它們通過“文本描述→AI 生…