(leetcode) 力扣100 10.和為K的子數組(前綴和+哈希)

題目

在這里插入圖片描述

給你一個整數數組 nums 和一個整數 k ,請你統計并返回 該數組中和為 k 的子數組的個數 。

子數組是數組中元素的連續非空序列。

數據范圍

1 <= nums.length <= 2 * 104
-1000 <= nums[i] <= 1000
-107 <= k <= 107

樣例

示例 1:

輸入:nums = [1,1,1], k = 2
輸出:2

示例 2:

輸入:nums = [1,2,3], k = 3
輸出:2

題解

博主的o(n2)方思路,還是太菜了,離最最優解就差一步!!

public int subarraySum(int[] nums, int k) {int res=0;int len=nums.length;int sum[]=new int[len];sum[0]=nums[0];//前綴和for(int i=1;i<len;i++){sum[i]=sum[i-1]+nums[i];}//遍歷for(int i=0;i<len;i++){for(int j=i;j<len;j++){int t;if(i-1>=0) {t= sum[j] - sum[i - 1];}else{t =sum[j];}if(t==k) res++;}}return res;}

官方題解(前綴和+哈希 O(n))

public class Solution {public int subarraySum(int[] nums, int k) {int count = 0;for (int start = 0; start < nums.length; ++start) {int sum = 0;for (int end = start; end >= 0; --end) {sum += nums[end];if (sum == k) {count++;}}}return count;}
}作者:力扣官方題解
鏈接:https://leetcode.cn/problems/subarray-sum-equals-k/solutions/238572/he-wei-kde-zi-shu-zu-by-leetcode-solution/
來源:力扣(LeetCode

思路

這道題整體來說不難,因為我們觀察數據量,只有2*104,那么即使O(n2)的時間復雜度也能通過,也就是說遍歷也能通過。但我們肯定追求更短的時間復雜度,首先,根據提議,知道我們是計算數組中一段連續子數組的和。想到數組中連續數據的和,我們應當首先想到前綴和,經過O(n)的預處理后,每一個連續子區間的值都可以在O(1)的時間復雜度內求出。

然后博主就止步于此了TWT。

官方題解確實很巧妙,在使用前綴和的前提下,做進一步思考,對前綴和式子做一點小小的轉換。
在這里插入圖片描述
我們將p[i] -p[j-1]==k的判斷式 改為 p[j-1]=pre[i]-k;

我們再進一步轉換思路,得到這樣的式子后,我們是否可以提前哈希處理前綴和數組每一個數值,并存儲每一個數值的數量,那么我們遍歷一遍前綴和數組,根據表達式,我們通過哈希找到符合條件p[j-1]的數目即可。

這類處理方法只能說大家和博主一起多多積累經驗,有了經驗才能一通百通。

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

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

相關文章

遨游衛星電話與普通手機有什么區別?

在數字化浪潮席卷全球的今天&#xff0c;通信設備的角色早已超越傳統語音工具&#xff0c;成為連接物理世界與數字世界的核心樞紐。然而&#xff0c;當普通手機在都市叢林中游刃有余時&#xff0c;面對偏遠地區、危險作業場景的應急通信需求&#xff0c;其局限性便顯露無遺。遨…

在Linux中如何使用Kill(),向進程發送發送信號

kill()函數 #include <sys/types.h> #include <signal.h> int kill(pid_t pid, int sig); 函數參數和返回值含義如下: pid:參數 pid 為正數的情況下,用于指定接收此信號的進程 pid;除此之外,參數 pid 也可設置為 0 或-1 以及小于-1 等不同值,稍后給說明。 …

Java SpringMVC 和 MyBatis 整合關鍵配置詳解

目錄 一、數據源配置二、MyBatis 工廠配置三、Mapper 掃描配置四、SpringMVC 配置五、整合示例實體類Mapper 接口Mapper XML 文件Service 類控制器JSP 頁面六、總結在 Java Web 開發中,SpringMVC 和 MyBatis 是兩個常用框架。SpringMVC 負責 Web 層的請求處理和視圖渲染,MyBa…

基于javaweb的SpringBoot高校圖書館座位預約系統設計與實現(源碼+文檔+部署講解)

技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論文…

零成本打造專屬AI圖像處理平臺:IOPaint本地部署與遠程訪問指南

文章目錄 前言1.什么是IOPaint&#xff1f;2.本地部署IOPaint3.IOPaint簡單實用4.公網遠程訪問本地IOPaint5.內網穿透工具安裝6.配置公網地址7.使用固定公網地址遠程訪問總結 前言 移動攝影的普及使得記錄生活變得輕而易舉&#xff0c;然而獲得一張高質量的照片往往需要付出不…

子串簡寫(JAVA)一維前綴和, 藍橋杯

這個題用前綴和&#xff0c;開兩個數組&#xff0c;一個存前n個字符數據的c1的數字個數&#xff0c;另一個前n個字符c2的數字個數&#xff0c;然后遍歷一次加起來&#xff0c;有一個測試點沒過去&#xff0c;把那個存最后數的換成long&#xff0c;應該是這題數據范圍給的不對&a…

基于javaweb的SpringBoot自習室預約系統設計與實現(源碼+文檔+部署講解)

技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論文…

基于大模型預測的全面驚厥性癲癇持續狀態技術方案大綱

目錄 一、引言二、數據收集與預處理三、大模型構建與訓練四、術前評估與預測五、術中監測與決策支持六、術后護理與康復預測七、統計分析與模型評估八、技術驗證與實驗證據九、健康教育與患者指導十、結論與展望一、引言 研究背景與意義 全面驚厥性癲癇持續狀態(GCSE)的臨床危…

Flink實時統計任務CPU異常排查與解決方案

一、核心原因分析 ?資源配置不合理? ?CPU核數與并行度不匹配?:TaskManager的taskmanager.numberOfTaskSlots設置過高,導致單個節點負載過載(如32核節點設置2個slot被多個任務占用,總需求超過物理CPU核數)。?內存與CPU分配不均?:內存不足引發頻繁GC,間接導致CPU利…

深入剖析 Linux 進程的睡眠與喚醒機制

在 Linux 操作系統的核心運轉體系中&#xff0c;進程的睡眠與喚醒機制如同精密時鐘的齒輪&#xff0c;默默驅動著整個系統的高效運行。理解這一機制不僅是掌握 Linux 內核工作原理的關鍵&#xff0c;更是優化系統性能、排查進程阻塞問題的核心所在。本文將深入剖析 Linux 進程睡…

【操作系統期末速成】①操作系統概述

——————2025.5.14————— 操作系統主要考點&#xff1a;操作系統概述、進程管理、內存管理、文件系統、設備管理&#xff08;前三個重點&#xff0c;第二三個是重中之重&#xff09; 操作系統概念&#xff08;OS&#xff09;&#xff1a;&#xff08;本質上是一個軟件…

【軟件工程】基于頻譜的缺陷定位

基于頻譜的缺陷定位&#xff08;Spectrum-Based Fault Localization, SBFL&#xff09;是一種通過分析程序執行覆蓋信息&#xff08;頻譜數據&#xff09;來定位代碼中缺陷的方法。其核心思想是&#xff1a;通過測試用例的執行結果&#xff08;成功/失敗&#xff09;和代碼覆蓋…

Spring Cloud:構建云原生微服務架構的最佳工具和實踐

&#x1f325;? 1. 引言 一、背景介紹&#xff1a;為什么需要微服務&#xff1f; 隨著互聯網技術的發展&#xff0c;企業級應用的功能日益復雜&#xff0c;傳統的單體架構&#xff08;Monolithic Architecture&#xff09;逐漸暴露出一系列問題&#xff1a; 項目龐大&#…

【Redis 進階】集群

思維導圖&#xff1a; 一、Redis集群概述 &#xff08;一&#xff09;廣義集群與狹義集群的定義 ??廣義集群??&#xff1a;指由多個機器組成的分布式系統&#xff0c;例如前面提到的主從模式和哨兵模式。??狹義集群??&#xff1a;Redis提供的集群模式&#xff0c;主要…

第二十八節:直方圖處理- 直方圖計算與繪制

直方圖是數字圖像處理的基石工具,在計算機視覺領域扮演著關鍵角色。通過本文,您將深入掌握使用OpenCV進行直方圖計算的底層原理,并學會多種專業的直方圖可視化方法。無論您是剛入門的新手還是希望提升技能的開發者,這里都有值得探索的進階技巧。 一、直方圖基礎理論 1.1 什…

傳奇游戲跟奇跡游戲的區別

前言 對傳奇和奇跡游戲背景感興趣的&#xff0c;可以去瀏覽以下相關博客&#xff1a; 傳奇與奇跡的發源 傳奇游戲跟奇跡游戲的區別 區別1&#xff1a;畫面 奇跡游戲畫面更為美觀&#xff08;圖1&#xff1a;奇跡游戲畫面&#xff09; 傳奇游戲畫面相對簡陋&#xff08;圖2&am…

佰力博科技準靜態d33測試的注意事項

準靜態d33測試是測量壓電材料縱向壓電應變常數的重要方法&#xff0c;其注意事項包括以下幾個方面&#xff1a; 選擇合適的測量設備 準靜態d33測試需要使用專用的壓電測試儀&#xff0c;如佰力博PEAI1000高精度壓電分析儀、準靜態d33測量儀或PCA1000壓電陶瓷綜合參數分析儀。這…

歸并排序~

歸并排序是經典的排序算法之一&#xff0c;是分治思想的體現。雖然在排序大多用sort就能搞定&#xff0c;但是有些題用可以用歸并順帶就解決掉了(比如求逆序對)。 歸并排序大概就是先將整個序列分為足夠小的片段&#xff0c;然后在每個小片段里面進行排序&#xff0c;然后再依…

UUG杭州站 | 團結引擎1.5.0 OpenHarmony新Feature介紹

PPT下載地址&#xff1a;https://u3d.sharepoint.cn/:b:/s/UnityChinaResources/EaZmiWfAAdFFmuyd6c-7_3ABhvZoaM69g4Uo2RrSzT3tZQ?e2h7RaL 在2025年4月12日的Unity User Group杭州站中&#xff0c;Unity中國OpenHarmony技術負責人劉偉賢帶來演講《團結引擎1.5.0 OpenHarmony新…

有效的聚水潭數據集成到MySQL案例

聚水潭數據集成到MySQL的技術案例分享 在本次技術案例中&#xff0c;我們將探討如何通過輕易云數據集成平臺&#xff0c;將聚水潭的采購退貨單數據高效、準確地集成到MySQL數據庫中的BI云妃秀采購退貨表。這個過程不僅需要處理大量的數據&#xff0c;還要確保數據的完整性和實…