【前綴和】和為 K 的子數組(medium)

【前綴和】和為 K 的子數組

  • 題目描述
  • 算法原理和細節問題
  • 代碼

題目描述

和為 K 的子數組

給定一個整數數組和一個整數 k ,請找到該數組中和為 k 的連續子數組的個數。
示例 1:
輸入:nums = [1,1,1], k = 2
輸出: 2
解釋: 此題 [1,1] 與 [1,1] 為兩種不同的情況
示例 2:
輸入:nums = [1,2,3], k = 3
輸出: 2
提示:
1 <= nums.length <= 2 * 104
-1000 <= nums[i] <= 1000
-107 <= k <= 107

算法原理和細節問題

在這里插入圖片描述
在這里插入圖片描述
解法(將前綴和存在哈希表中):
算法思路:
設 i 為數組中的任意位置,? sum[i] 表? [0, i] 區間內所有元素的和。
想知道有多少個「以 i 為結尾的和為 k 的?數組」,就要找到有多少個起始位置為 x1, x2, x3… 使得 [x, i] 區間內的所有元素的和為 k 。那么 [0, x] 區間內的和是不是就是sum[i] - k 了。于是問題就變成:
? 找到在 [0, i - 1] 區間內,有多少前綴和等于 sum[i] - k 的即可。
我們不?真的初始化?個前綴和數組,因為我們只關?在 i 位置之前,有多少個前綴和等于sum[i] - k 。因此,我們僅需??個哈希表,?邊求當前位置的前綴和,?邊存下之前每?種前綴和出現的次數。

代碼

C++ 算法代碼:

class Solution
{
public:int subarraySum(vector<int>& nums, int k) {unordered_map<int, int> hash; // 統計前綴和出現的次數hash[0] = 1;int sum = 0, ret = 0;for(auto x : nums){sum += x; // 計算當前位置的前綴和if(hash.count(sum - k)) ret += hash[sum - k]; // 統計個數hash[sum]++;}return ret;}
}

Java 算法代碼:

class Solution {public int subarraySum(int[] nums, int k) {Map<Integer, Integer> hash = new HashMap<Integer, Integer>();hash.put(0, 1);int sum = 0, ret = 0;for(int x : nums){sum += x; // 計算當前位置的前綴和ret += hash.getOrDefault(sum - k, 0); // 統計結果hash.put(sum, hash.getOrDefault(sum, 0) + 1); // 把當前的前綴和丟到哈希表??}return ret;}
}

:統計結果 和 把當前的前綴丟到哈希表里不能換順序
否則k=0時將不會輸出0

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

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

相關文章

在Ubuntu服務器上部署Label Studio

一、拉取鏡像 docker pull heartexlabs/label-studio:latest 二、啟動容器 &#xff08;回到用戶目錄&#xff0c;例&#xff1a;輸入pwd&#xff0c;顯示 /home/<user>&#xff09; docker run -d --name label-studio -it -p 8081:8080 -v $(pwd)/mydata:/label-st…

MySQL 從入門到精通(三):日志管理詳解 —— 從排錯到恢復的核心利器

在 MySQL 數據庫的日常運維中&#xff0c;日志是定位問題、優化性能、數據恢復的核心工具。無論是排查服務器啟動異常&#xff0c;還是分析慢查詢瓶頸&#xff0c;亦或是通過二進制日志恢復誤刪數據&#xff0c;日志都扮演著 “數據庫黑匣子” 的角色。本文將深入解析 MySQL 的…

內存中的“BANK”

一、BANK的定義與物理結構 基本概念 BANK&#xff08;存儲體&#xff09; 是內存芯片內部的一個邏輯或物理分區&#xff0c;每個BANK由存儲單元陣列、地址解碼電路和緩沖器組成&#xff0c;用于分塊管理內存操作。 作用&#xff1a;通過并行操作減少訪問沖突&#xff0c;提升內…

機器學習——聚類算法練習題

一、 隨機創建不同二維數據集作為訓練集 &#xff0c;并結合k-means算法將其聚類 &#xff0c;你可以嘗試分別聚類不同數量的簇 &#xff0c;并觀察聚類 效果&#xff1a; 聚類參數n_cluster傳值不同 &#xff0c;得到的聚類結果不同 代碼展示&#xff1a; from sklearn.da…

kafka----初步安裝與配置

目錄標題 ?kafka 與 zookeeper間的關系一.集群部署二.修改配置文件三.分發安裝包四.啟動與關閉 kafka 與 zookeeper 相同&#xff0c;是以集群的形式使用 ?kafka 與 zookeeper間的關系 kafka 的使用 要在 zookeeper 集群配置好的基礎上 使用要想啟動kafka 要先啟動 zookeep…

進程與線程:07 CPU調度策略

一、課程內容概述 本節課程主要講解操作系統的CPU調度策略&#xff0c;聚焦于基本操作系統上的調度算法&#xff0c;探討其大致實現方式、需折中考慮的問題。CPU調度在不同場景下復雜程度不同&#xff0c;如衛星、導彈等實時性要求高的系統&#xff0c;需采用實時調度&#xf…

JPG與PDF格式轉換器

該插件可實現JPG與PDF格式的互轉。 MainForm.Designer.cs using System.Windows.Forms; namespace JpgToPdfConverter {partial class MainForm{private System.ComponentModel.IContainer components null;protected override void Dispose(bool disposing){if (disposing &…

LlamaIndex 第八篇 MilvusVectorStore

本指南演示了如何使用 LlamaIndex 和 Milvus 構建一個檢索增強生成&#xff08;RAG&#xff09;系統。 RAG 系統將檢索系統與生成模型相結合&#xff0c;根據給定的提示生成新的文本。該系統首先使用 Milvus 等向量相似性搜索引擎從語料庫中檢索相關文檔&#xff0c;然后使用生…

淺聊一下數據庫的索引優化

背景 這里的索引說的是關系數據庫&#xff08;MSSQL&#xff09;中的索引。 本篇不是純技術性的內容&#xff0c;只是聊一次性能調優的經歷&#xff0c;包含到一些粗淺的實現和驗證手段&#xff0c;所以&#xff0c;大神忽略即可。 額…對了&#xff0c;筆者對數據庫的優化手段…

【android bluetooth 框架分析 02】【Module詳解 7】【VendorSpecificEventManager 模塊介紹】

1. 背景 我們在 gd_shim_module 介紹章節中&#xff0c;看到 我們將 VendorSpecificEventManager 模塊加入到了 modules 中。 // system/main/shim/stack.cc modules.add<hci::VendorSpecificEventManager>();在 ModuleRegistry::Start 函數中我們對 加入的所有 module…

小剛說C語言刷題—1080質因子

1.題目描述 任意輸入一正整數 N &#xff0c;求出它的所有質因子。如&#xff1a;10&#xff1d;25&#xff0c;20&#xff1d;225。 輸入 輸入只有一行&#xff0c;包括 11個整數 n (1≤n≤32768) 輸出 輸出若干行&#xff0c;按從小到大的順序給出這個數的所有質因子&am…

C語言中的宏

1.防止頭文件重復包含 1.#pragma once #pragma once 是一個編譯器指令&#xff0c;用于防止頭文件被重復包含。它的核心作用是通過簡單語法替代傳統的頭文件保護宏&#xff08;#ifndef/#define/#endif&#xff09;&#xff0c;提升代碼簡潔性和可維護性。 作用詳解 防止重復…

MapReduce 模型

?引言? MapReduce 是分布式計算領域的里程碑式模型&#xff0c;由 Google 在 2004 年論文中首次提出&#xff0c;旨在簡化海量數據處理的復雜性。其核心思想是通過函數式編程的 ?Map? &#xff08;映射&#xff09;和 ?Reduce? &#xff08;歸約&#xff09;階段&#x…

Linux文件編程——標準庫函數fopen、fread、fwrite等函數

1. fopen — 打開文件 函數原型&#xff1a; FILE *fopen(const char *filename, const char *mode);參數&#xff1a; filename&#xff1a;要打開的文件名&#xff0c;可以是相對路徑或絕對路徑。 mode&#xff1a;文件打開模式&#xff0c;表示文件的操作方式&#xff08…

從 Git 到 GitHub - 使用 Git 進行版本控制 - Git 常用命令

希望本貼能從零開始帶您一起學習如何使用 Git 進行版本控制&#xff0c;并結合遠程倉庫 GitHub。這會是一個循序漸進的指南&#xff0c;我們開始吧&#xff01; 學習 Git 和 GitHub 的路線圖&#xff1a; 理解核心概念&#xff1a;什么是版本控制&#xff1f;Git 是什么&…

2025.05.11拼多多機考真題算法崗-第四題

?? 點擊直達筆試專欄 ??《大廠筆試突圍》 ?? 春秋招筆試突圍在線OJ ?? 筆試突圍OJ 04. 記憶碎片重組 問題描述 盧小姐正在開發一款名為"記憶碎片"的游戲,玩家需要分析混亂的記憶數據,推測出形成這些記憶的原始序列。游戲中,記憶數據存儲在一個特殊的數…

Android Exoplayer多路不同時長音視頻混合播放

在上一篇Android Exoplayer 實現多個音視頻文件混合播放以及音軌切換中我們提到一個問題&#xff0c;如果視頻和音頻時長不一致&#xff0c;特別是想混合多個音頻和多個視頻時就會出問題&#xff0c;無法播放。報錯如下&#xff1a; E/ExoPlayerImplInternal(11191): Playback…

Datawhale PyPOTS時間序列5月第1次筆記

課程原地址&#xff1a; https://github.com/WenjieDu/PyPOTS&#xff08;Package地址&#xff09; https://github.com/WenjieDu/BrewPOTS/tree/datawhale/202505_datawhale&#xff08;Tutorial地址&#xff09; 2.1 PyPOTS簡介 PyPOTS 是一個專為處理部分觀測時間序列&a…

網安學途—流量分析 attack.pcap

attack.pacp 使用Wireshark查看并分析虛擬機windows 7桌面下的attack.pcapng數據包文件&#xff0c;通過分析數據包attack.pcapng找出黑客的IP地址&#xff0c;并將黑客的IP地址作為FLAG &#xff08;形式&#xff1a;[IP地址]&#xff09;提交&#xff1a; 過濾器篩選&#x…

【大模型】DeepResearcher:通用智能體通過強化學習探索優化

DeepResearcher&#xff1a;通過強化學習在真實環境中擴展深度研究 一、引言二、技術原理&#xff08;一&#xff09;強化學習與深度研究代理&#xff08;二&#xff09;認知行為的出現&#xff08;三&#xff09;模型架構 三、實戰運行方式&#xff08;一&#xff09;環境搭建…