LeetCode LCR 010 和為 K 的子數組 (Java)

兩種解法詳解:暴力枚舉與前綴和+哈希表尋找和為k的子數組

在解決數組中和為k的連續子數組個數的問題時,我們可以采用不同的方法。本文將詳細解析兩種常見的解法:暴力枚舉法和前綴和結合哈希表的方法,分析它們的思路、優缺點及適用場景。


問題描述

給定一個整數數組 nums 和一個整數 k,要求找到所有和為 k 的連續子數組的個數。

示例

輸入:nums = [1,1,1], k = 2
輸出:2
解釋:[1,1](前兩個元素)和 [1,1](后兩個元素)各為一種情況。

解法一:暴力枚舉法

思路分析

暴力枚舉法的核心思想是遍歷所有可能的子數組,計算它們的和是否等于 k。具體來說:

  • 外層循環固定子數組的起始位置 start
  • 內層循環從 start 出發,逐步擴展子數組的結束位置 j,并累加元素和。
  • 當子數組和等于 k 時,計數器增加。

代碼實現

public static int subarraySum_1(int[] nums, int k) {int count = 0;for (int start = 0; start < nums.length; start++) {int sum = 0;for (int j = start; j < nums.length; j++) {sum += nums[j];if (sum == k) {count++;}}}return count;
}

復雜度分析

  • 時間復雜度:O(n2)。雙重循環遍歷所有子數組,對于長度為 n 的數組,共有 n(n+1)/2 個子數組。
  • 空間復雜度:O(1)。僅使用常數空間存儲臨時變量。

適用場景

適用于小規模數據(例如 n ≤ 1e3)。當 n 較大時(如 n = 2e4),暴力法會因時間復雜度過高而超時。


解法二:前綴和 + 哈希表

思路分析

該方法利用前綴和的性質和哈希表的快速查詢特性,將時間復雜度優化至線性:

  1. 前綴和定義sum[i] 表示數組前 i 個元素的和。
  2. 關鍵觀察:若存在 sum[j] - sum[i] = k,則子數組 nums[i+1..j] 的和為 k
  3. 哈希表優化:維護哈希表記錄前綴和出現的次數。遍歷時,若當前前綴和 sumsum - k 存在,則累加次數。

代碼實現

    public static int subarraySum_2(int[] nums, int k) {int count=0;    //記錄結果int sum = 0;    //記錄前綴和//HashMap,k:存儲前綴和,V:存儲前綴和出現的次數HashMap<Integer, Integer> map = new HashMap<>();//第一個數的前綴和為0map.put(0,1);for(int i=0;i<nums.length;i++){sum +=nums[i];//注意這一定是先去判斷再添加,每個數都要去判斷一下,第一個數的前綴和已經添加了,所以需要判斷if(map.containsKey(sum-k)){count += map.get(sum-k);}//如何這個sum沒出現過:v = 0+1,出現過:v = 原來v + 1;map.put(sum,map.getOrDefault(sum,0)+1);}return count;}

復雜度分析

  • 時間復雜度:O(n)。只需一次遍歷數組,哈希表查詢和插入操作均為 O(1)。
  • 空間復雜度:O(n)。哈希表最多存儲 n 個不同的前綴和。

關鍵點

  • 哈希表初始化:預先放入 (0, 1),處理以第一個元素開頭的子數組和為 k 的情況。
  • 負數處理:數組中可能存在負數,導致前綴和重復出現,哈希表需正確統計次數。

方法對比

方法時間復雜度空間復雜度適用場景
暴力枚舉法O(n2)O(1)小規模數據
前綴和 + 哈希表法O(n)O(n)大規模數據

總結

  • 暴力枚舉法思路簡單,但僅適用于小規模數據。
  • 前綴和+哈希表通過空間換時間,將復雜度降至線性,是處理大規模數據的高效方法。
  • 特別注意哈希表的初始化與更新邏輯,確保正確處理所有邊界情況。

相關題目:LeetCode 560. 和為K的子數組

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

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

相關文章

OpenVLA (2) 機器人環境和環境數據

文章目錄 [TOC](文章目錄) 前言1 BridgeData V21.1 概述1.2 硬件環境 2 數據集2.1 場景與結構2.2 數據結構2.2.1 images02.2.2 obs_dict.pkl2.2.3 policy_out.pkl 3 close question3.1 英偉達環境3.2 LIBERO 環境更適合仿真3.3 4090 運行問題 前言 按照筆者之前的行業經驗, 數…

深度學習(第3章——亞像素卷積和可形變卷積)

前言&#xff1a; 本章介紹了計算機識別超分領域和目標檢測領域中常常使用的兩種卷積變體&#xff0c;亞像素卷積&#xff08;Subpixel Convolution&#xff09;和可形變卷積&#xff08;Deformable Convolution&#xff09;&#xff0c;并給出對應pytorch的使用。 亞像素卷積…

大模型在腰椎間盤突出癥預測與治療方案制定中的應用研究

目錄 一、引言 1.1 研究背景 1.2 研究目的與意義 二、腰椎間盤突出癥概述 2.1 定義與病因 2.2 癥狀與診斷方法 2.3 治療方法概述 三、大模型技術原理與應用基礎 3.1 大模型的基本原理 3.2 大模型在醫療領域的應用現狀 3.3 用于腰椎間盤突出癥預測的可行性分析 四、…

Vue3學習(組合式API——ref模版引用與defineExpose編譯宏函數)

目錄 一、ref模版引用。 &#xff08;1&#xff09;基本介紹。 &#xff08;2&#xff09;核心基本步驟。(以獲取DOM、組件為例) &#xff08;3&#xff09;案例&#xff1a;獲取dom對象演示。 <1>需求&#xff1a;點擊按鈕&#xff0c;讓輸入框聚焦。 &#xff08;4&…

公鏈開發及其配套設施:錢包與區塊鏈瀏覽器

公鏈開發及其配套設施&#xff1a;錢包與區塊鏈瀏覽器的技術架構與生態實踐 ——2025年區塊鏈基礎設施建設的核心邏輯與創新突破 一、公鏈開發&#xff1a;構建去中心化世界的基石 1. 技術架構設計的三重挑戰 公鏈作為開放的區塊鏈網絡&#xff0c;需在性能、安全性與去中心…

Kotlin 作用域函數(let、run、with、apply、also)對比

Kotlin 的 作用域函數&#xff08;Scope Functions&#xff09; 是簡化代碼邏輯的重要工具&#xff0c;它們通過臨時作用域為對象提供更簡潔的操作方式。以下是 let、run、with、apply、also 的對比分析&#xff1a; 一、核心區別對比表 函數上下文對象引用返回值是否擴展函數…

14、Python時間表示:Unix時間戳、毫秒微秒精度與time模塊實戰

適合人群&#xff1a;零基礎自學者 | 編程小白快速入門 閱讀時長&#xff1a;約5分鐘 文章目錄 一、問題&#xff1a;計算機中的時間的表示、Unix時間點&#xff1f;1、例子1&#xff1a;計算機的“生日”&#xff1a;Unix時間點2、答案&#xff1a;&#xff08;1&#xff09;U…

AI日報 - 2024年5月17日

&#x1f31f; 今日概覽 (60秒速覽) ▎&#x1f916; 大模型前沿 | OpenAI推出自主編碼代理Codex&#xff1b;Google DeepMind發布Gemini驅動的編碼代理AlphaEvolve&#xff0c;能設計先進算法&#xff1b;Meta旗艦AI模型Llama 4 Behemoth發布推遲。 Codex能并行處理多任務&…

DriveMM:用于自動駕駛的一體化大型多模態模型——論文閱讀

《DriveMM: All-in-One Large Multimodal Model for Autonomous Driving》2024年12月發表&#xff0c;來自中山大學深圳分校和美團的論文。 大型多模態模型&#xff08;LMM&#xff09;通過整合大型語言模型&#xff0c;在自動駕駛&#xff08;AD&#xff09;中表現出卓越的理解…

C++_STL_map與set

1. 關聯式容器 在初階階段&#xff0c;我們已經接觸過STL中的部分容器&#xff0c;比如&#xff1a;vector、list、deque、 forward_list(C11)等&#xff0c;這些容器統稱為序列式容器&#xff0c;因為其底層為線性序列的數據結構&#xff0c;里面 存儲的是元素本身。那什么是…

【嵌入式開發-RGB 全彩 LED】

嵌入式開發-RGB 全彩 LED ■ RGB 全彩 LED簡介■ 電路設計■ ■ RGB 全彩 LED簡介 RGB 全彩 LED 模塊顯示不同的顏色。 ■ 電路設計 全彩 LED 使用 PA5、 藍色&#xff08;B&#xff09; TIM2_CHN3 PA1、 綠色&#xff08;G&#xff09;TIM2_CHN2 PA2、 紅色&#xff08;R&am…

計算機網絡:手機和基站之間的通信原理是什么?

手機與基站之間的通信是無線通信技術的核心應用之一,涉及復雜的物理層傳輸、協議交互和網絡管理機制。以下從技術原理、通信流程和關鍵技術三個層面深入解析這一過程: 一、蜂窩網絡基礎架構 1. 蜂窩結構設計 基本原理:將服務區域劃分為多個六邊形“蜂窩小區”,每個小區由*…

【Docker】Docker安裝RabbitMQ

目錄 1.拉取鏡像 2. 創建掛載目錄 3.創建和啟動 4.登錄管理端 1.拉取鏡像 推薦使用帶 Web 管理界面的官方鏡像&#xff08;management&#xff09; # 拉取docker鏡像 docker pull rabbitmq:management響應內容&#xff1a; 2. 創建掛載目錄 創建掛載目錄和日志目錄 #rabb…

交叉編譯源碼的方式移植ffmpeg-rockchip

獲取ffmpeg源碼 git submodule add -f https://github.com/FFmpeg/FFmpeg.git thirdparty/FFmpeg 瑞芯微ffmpeg-rk git clone https://github.com/jjm2473/ffmpeg-rk/tree/enc# 參考的一位博主的說法 使用 ffmpeg-rochip 的好處 傳統的使用硬件編解碼的開發思路是&#xf…

9.0 C# 調用solidworks介紹1

一、C# 與 SolidWorks 聯合開發概述 SolidWorks 提供了完整的 API(應用程序接口),允許開發者使用 C# 等編程語言進行二次開發,實現自動化設計、定制功能等。 主要技術要點包括: 1. API 結構:SolidWorks API 是基于 COM 的接口,包含數百個對象和數千個方法…

AD 多層線路及裝配圖PDF的輸出

裝配圖的輸出&#xff1a; 1.點開‘智能PDF’ 2. 設置顯示頂層&#xff1a; 設置顯示底層&#xff1a; 多層線路的輸出 同樣使用‘智能PDF’

SpringBoot + Shiro + JWT 實現認證與授權完整方案實現

SpringBoot Shiro JWT 實現認證與授權完整方案 下面博主將詳細介紹如何使用 SpringBoot 整合 Shiro 和 JWT 實現安全的認證授權系統&#xff0c;包含核心代碼實現和最佳實踐。 一、技術棧組成 技術組件- 作用版本要求SpringBoot基礎框架2.7.xApache Shiro認證和授權核心1.…

PCIe數據采集系統詳解

PCIe數據采集系統詳解 在上篇文章中&#xff0c;廢了老大勁兒我們寫出了PCIe數據采集系統&#xff1b;其中各個模塊各司其職&#xff0c;相互配合。完成了從數據采集到高速存儲到DDR3的全過程。今天我們呢就來詳細講解他們之間的關系&#xff1f;以及各個模塊的關鍵點&#xff…

2025云智算技術白皮書

1. 云智算的演進背景 傳統云計算面臨三大挑戰&#xff1a; 算力需求激增&#xff1a;AI大模型訓練需十萬卡級GPU集群&#xff0c;資源調度能力不足。網絡性能瓶頸&#xff1a;TB級參數同步對低時延、高吞吐要求遠超傳統網絡架構。服務形態單一&#xff1a;IaaS/PaaS無法覆蓋A…

C語言編程中的時間處理

最簡單的time 在C語言編程中&#xff0c;處理時間最簡單的函數就是time了。它的原型為&#xff1a; #include <time.h> time_t time(time_t *_Nullable tloc);返回自從EPOCH&#xff0c;即1970年1月1日的零點零時零分&#xff0c;到當前的秒數。 輸入參數可以是NULL。…