子串題解——和為 K 的子數組【LeetCode】

謹記: 數組不是單調的話,不要用滑動窗口,考慮用前綴和

寫法一:兩次遍歷

代碼的核心思想是通過?前綴和?和?哈希表?來高效地統計符合條件的子數組個數。具體步驟如下:

  1. 計算前綴和數組?s

    • s[i]?表示?nums?的前?i?個元素的和。
    • s[0] = 0,表示前 0 個元素的和為 0。
    • 例如,nums = [1, 1, 1],則?s = [0, 1, 2, 3]
  2. 使用?defaultdict?記錄前綴和出現的次數

    • defaultdict(int)?是一個字典,默認值為?0。如果訪問一個不存在的鍵,會返回?0,而不是拋出異常。
    • cnt[sj]?表示前綴和?sj?出現的次數。
  3. 遍歷前綴和數組?s,統計符合條件的子數組個數

    • 對于每個前綴和?sj,檢查是否存在前綴和?sj - k
      • 如果存在,則說明從某個位置到當前位置的子數組和為?k
      • 將?cnt[sj - k]?的值加到?ans?中。
    • 將當前前綴和?sj?記錄到?cnt?中。
from collections import defaultdictclass Solution(object):def subarraySum(self, nums, k):""":type nums: List[int]:type k: int:rtype: int"""# 1. 計算前綴和數組 ss = [0] * (len(nums) + 1)  # s[0] = 0,表示前 0 個元素的和為 0for i, x in enumerate(nums):s[i + 1] = s[i] + x  # s[i+1] = s[i] + nums[i]# 2. 初始化結果和哈希表ans = 0  # 記錄符合條件的子數組個數cnt = defaultdict(int)  # 哈希表,記錄前綴和出現的次數# 3. 遍歷前綴和數組,統計符合條件的子數組個數for sj in s:# 如果存在 s[i] = sj - k,則說明從 i+1 到 j 的子數組和為 kans += cnt[sj - k]# 將當前前綴和 sj 記錄到哈希表中cnt[sj] += 1return ans  # 返回結果

寫法二:一次遍歷

  • 前綴和:使用變量?s?動態計算當前的前綴和。
  • 哈希表:使用哈希表?cnt?記錄前綴和出現的次數。
  • 核心思想:對于當前前綴和?s,檢查是否存在前綴和?s - k。如果存在,則說明從某個位置到當前位置的子數組和為?k

核心邏輯

  1. 更新前綴和
    • s += x:將當前元素?x?加到前綴和?s?中。
  2. 檢查是否存在?s - k
    • 如果?cnt[s - k]?存在,則說明從某個位置到當前位置的子數組和為?k
    • 將?cnt[s - k]?的值加到?ans?中。
  3. 記錄當前前綴和
    • cnt[s] += 1:將當前前綴和?s?記錄到哈希表中。
from collections import defaultdictclass Solution(object):def subarraySum(self, nums, k):""":type nums: List[int]:type k: int:rtype: int"""ans = s = 0  # ans 記錄結果,s 記錄當前前綴和cnt = defaultdict(int)  # 哈希表,記錄前綴和出現的次數cnt[0] = 1  # 初始化,s[0]=0 出現了一次# 遍歷數組,動態計算前綴和for x in nums:s += x  # 更新當前前綴和# 如果存在 s - k,則說明從某個位置到當前位置的子數組和為 kans += cnt[s - k]# 將當前前綴和 s 記錄到哈希表中cnt[s] += 1return ans  # 返回結果

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

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

相關文章

硬件服務器基礎

1、硬件服務器基礎 2、服務器后面板 3、組件 3.1 CPU 3.2 內存 3.3 硬盤 3.4 風扇 4、服務器品牌 4.1 配置 4.2 CPU 架構 4.2.1 CPU 命名規則 4.2.2 服務器 CPU 和家用 CPU 的區別 4.2.3 CPU 在主板的位置 4.2.4 常見 CPU 安裝方式 4.3 內存中組件 4.3.1 內存的分類 4.3.1.1 …

OpenWebUI(1)源碼學習構建

1. 前言 通過docker鏡像拉取安裝就不介紹了,官方的命令很多。本節主要擼一擼源碼,所以,本地構建 2. 技術框架和啟動環境 后端python,前端svelte 環境要求:python > 3.11 ,Node.js > 20.10 3. 源…

三方接口設計注意事項

前言 隨著業務系統間集成需求的增加,三方接口設計已成為現代軟件架構中的關鍵環節。一個設計良好的三方接口不僅能夠提供穩定可靠的服務,還能確保數據安全、提升系統性能并支持業務的持續發展。 一、設計原則 1. 統一接口原則 三方接口設計應遵循統一…

CSS篇-5

1. 內聯元素可以實現浮動嗎? 是的,內聯元素完全可以實現浮動。在 CSS 中,任何元素都可以被設置為浮動(float)。 當一個元素被設置了 float 屬性后,無論它本身是塊級元素還是內聯元素,它都會表現出類似于塊級元素的特性: 生成塊級框(Block-level box):浮動元素會生…

RocketMQ 學習

消息隊列 參考官方文檔:https://rocketmq.apache.org/zh/docs/ 基本概念 主題(Topic):是消息傳輸和消息存儲的頂級容器,不是實際的消息容器,而是一個邏輯上的概念,用于區分不同業務消息的標識&…

Conda更換鏡像源教程:加速Python包下載

Conda更換鏡像源教程:加速Python包下載 為什么要更換conda鏡像源? Conda作為Python的包管理和環境管理工具,默認使用的是國外鏡像源,在國內下載速度往往較慢。通過更換為國內鏡像源,可以顯著提高包下載速度&#xff…

PCIe—TS1/TS2 之Polling.Active(一)

前文 訓練序列有序集用于比特對齊、符號對齊以及交換物理層參數。2.5GT/s和5GT/s速率時,訓練序列有序集不會加擾,只用8b/10b 編碼。但到8GT/s及以上速率時,采用128b/130b編碼,符號有可能加擾有可能不加擾,具體…

【HarmonyOS Next之旅】DevEco Studio使用指南(二十八) -> 開發云對象

目錄 1 -> 開發流程 2 -> 創建云對象 3 -> 開發云對象 4 -> 調試云對象 4.1 -> 前提條件 4.2 -> 通過本地調用方式調試云對象 4.3 -> 通過遠程調用方式調試云對象 5 -> 部署云對象 1 -> 開發流程 除去傳統的云函數,您還可在端云…

基于51單片機的音樂盒汽車喇叭調音量proteus仿真

地址: https://pan.baidu.com/s/1l3CSSMi4uMV5-XLefnKoSg 提取碼:1234 仿真圖: 芯片/模塊的特點: AT89C52/AT89C51簡介: AT89C51 是一款常用的 8 位單片機,由 Atmel 公司(現已被 Microchip 收…

實驗設計與分析(第6版,Montgomery)第5章析因設計引導5.7節思考題5.8 R語言解題

本文是實驗設計與分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅玨生譯) 第5章析因設計引導5.7節思考題5.8 R語言解題。主要涉及方差分析&#xff0c;正態假設檢驗&#xff0c;殘差分析&#xff0c;交互作用圖。 (a) dataframe<-data.frame( Lightc(580,568…

[藍橋杯]分考場

題目描述 nn 個人參加某項特殊考試。 為了公平&#xff0c;要求任何兩個認識的人不能分在同一個考場。 求是少需要分幾個考場才能滿足條件。 輸入描述 輸入格式&#xff1a; 第一行&#xff0c;一個整數 nn (1≤n≤1001≤n≤100)&#xff0c;表示參加考試的人數。 第二行…

C++: STL簡介與string類核心技術解析及其模擬實現

目錄: 一.STL二.string類一、創建對象的6種構造方式二、常用接口解析1. 容量操作2. 元素訪問3. 修改操作4. 字符串操作 三.string模擬實現一、設計基礎&#xff1a;類結構與資源管理二、拷貝控制&#xff1a;深拷貝的三種實現1. 傳統深拷貝2. 現代寫法&#xff08;推薦&#xf…

Python進階【四】:XML和JSON文件處理

Python提供了多種處理XML和JSON文件的方式&#xff0c;讓我們來看看最常用的方法。 一、處理JSON文件 JSON在Python中處理起來非常簡單&#xff0c;因為它的結構與Python的字典(dict)和列表(list)幾乎一致。 常用模塊&#xff1a;json模塊 優點&#xff1a;Python標準庫自帶…

Golang | 搜索哨兵-對接分布式gRPC服務

哨兵&#xff08;centennial&#xff09;負責接待客人&#xff0c;直接與調用方對接。哨兵的核心組件包括service HUB和connection pool。service HUB用于與服務中心通信&#xff0c;獲取可提供服務的節點信息。connection pool用于緩存與index worker的連接&#xff0c;避免每…

CSS3實現的賬號密碼輸入框提示效果

以下是通過CSS3實現輸入框提示效果的常用方法&#xff0c;包含浮動標簽和動態提示兩種經典實現方案&#xff1a; 一、浮動標簽效果 <div class"input-group"><input type"text" required><label>用戶名</label> </div><…

maven編譯時跳過test過程

如果代碼里有無法在打包環境中測試的部分&#xff0c;則直接運行mvn clean package&#xff0c;因為測試失敗&#xff0c;會導致打包失敗。目前有兩種方式可以跳過測試&#xff1a; 1. mvn clean package -DskipTests&#xff0c;這會跳過執行階須&#xff0c;但仍會生成測試所…

美業+智能體,解鎖行業轉化新密碼(2/6)

摘要&#xff1a;中國美業市場近年蓬勃發展&#xff0c;規模持續擴大&#xff0c;預計不久將突破萬億級別&#xff0c;但同時也面臨著諸多挑戰&#xff0c;如獲客成本攀升、服務質量不穩定、難以滿足消費者多元化個性化需求等。智能體技術的出現為美業帶來了新的發展機遇&#…

設計模式——責任鏈設計模式(行為型)

摘要 責任鏈設計模式是一種行為型設計模式&#xff0c;旨在將請求的發送者與接收者解耦&#xff0c;通過多個處理器對象按鏈式結構依次處理請求&#xff0c;直到某個處理器處理為止。它包含抽象處理者、具體處理者和客戶端等核心角色。該模式適用于多個對象可能處理請求的場景…

react/vue移動端項目,刷新頁面404的原因以及解決辦法

一 、 項目 移動端 二、背景 1、問題描述&#xff1a;react/vue移動端項目&#xff0c;正常的頁面操作跳轉&#xff0c;不會出現404的問題&#xff0c;但是一旦刷新&#xff0c;就會出現404報錯 2、產生原因&#xff1a; React Router是客戶端的路由&#xff0c;當再次刷新時…

數據結構-算法學習C++(入門)

目錄 03二進制和位運算04 選擇、冒泡、插入排序05 對數器06 二分搜索07 時間復雜度和空間復雜度08 算法和數據結構09 單雙鏈表09.1單雙鏈表及反轉09.2合并鏈表09.2兩數相加09.2分隔鏈表 013隊列、棧、環形隊列013.1隊列013.2棧013.3循環隊列 014棧-隊列的相互轉換014.1用棧實現…