每日算法-250602

每日算法學習記錄 - 250602

今天學習和復習了兩道利用前綴和與哈希表解決的子數組問題,特此記錄。

560. 和為 K 的子數組

題目

LeetCode Problem 560 Screenshot

思路

本題的核心思想是利用 前綴和哈希表 來優化查找過程。

解題過程

題目要求統計和為 k 的子數組個數。

  1. 我們首先預處理出一個前綴和數組 prefix,其中 prefix[i] 表示原數組 nums 中區間 [0, i-1] 的元素之和。特別地,prefix[0] = 0
  2. 對于任意子數組 nums[i...j-1] (假設 j > i),其和可以表示為 prefix[j] - prefix[i]
  3. 我們目標是找到滿足 prefix[j] - prefix[i] = k(i, j) 對的個數。
  4. 將上式變形,得到 prefix[i] = prefix[j] - k
  5. 我們可以遍歷計算出的 prefix 數組(從 prefix[0]prefix[n],其中 nnums 的長度)。當遍歷到 prefix[j](在代碼中用變量 x 表示)時,我們希望在 之前已經遇到過 的前綴和中查找是否存在一個 prefix[i],使得 prefix[i] == prefix[j] - k
  6. 使用一個哈希表 map 來存儲已經遍歷過的前綴和 sum_val 及其出現的次數 count (即 map<sum_val, count>)。
  7. 當我們遍歷 prefix 數組,對于當前的元素 x (它代表一個 prefix[j])

這樣,通過一次遍歷,我們就能統計出所有和為 k 的子數組數量。

復雜度

  • 時間復雜度: O ( N ) O(N) O(N),其中 N N N 是數組 nums 的長度。計算前綴和數組需要 O ( N ) O(N) O(N),遍歷前綴和數組并操作哈希表(插入和查找平均 O ( 1 ) O(1) O(1))也需要 O ( N ) O(N) O(N)
  • 空間復雜度: O ( N ) O(N) O(N),主要用于存儲前綴和數組和哈希表。在最壞情況下,哈希表可能存儲 N + 1 N+1 N+1 個不同的前綴和。

Code

class Solution {public int subarraySum(int[] nums, int k) {int ret = 0, n = nums.length;int[] prefix = new int[n + 1];Map<Integer, Integer> map = new HashMap<>(n + 1);for (int i = 0; i < n; i++) {prefix[i + 1] = prefix[i] + nums[i];}for (int x : prefix) {int key = x - k;ret += map.getOrDefault(key, 0);map.put(x, map.getOrDefault(x, 0) + 1);}return ret;}
}

930. 和相同的二元子數組(復習)

題目

LeetCode Problem 930 Screenshot

說明

這道題是復習題。之前使用過滑動窗口的解法(可參考 每日算法-250404),本次采用與上一題 (560. 和為 K 的子數組) 類似的 前綴和 + 哈希表 思路。

由于解題邏輯與上一題高度一致(只是目標和從 k 變成了 goal),這里不再贅述詳細過程,僅列出代碼實現。核心都是計算前綴和,然后查找 current_prefix_sum - goal 是否在哈希表中出現過。

代碼

class Solution {public int numSubarraysWithSum(int[] nums, int goal) {int ret = 0, n = nums.length;int[] prefixSum = new int[n + 1];Map<Integer, Integer> map = new HashMap<>(n + 1);for (int i = 0; i < n; i++) {prefixSum[i + 1] = prefixSum[i] + nums[i];}for (int x : prefixSum) {int key = x - goal;ret += map.getOrDefault(key, 0);map.put(x, map.getOrDefault(x, 0) + 1);}return ret;}
}

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

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

相關文章

Arch安裝botw-save-state

devkitPro https://blog.csdn.net/qq_39942341/article/details/148387077?spm1001.2014.3001.5501 cargo https://blog.csdn.net/qq_39942341/article/details/148387783?spm1001.2014.3001.5501 megaton https://blog.csdn.net/qq_39942341/article/details/148388164?spm…

STM32學習筆記---時鐘樹

目錄 一、時鐘樹&#xff1a;M3---STM32F103 1、主要時鐘來源 ?2、時鐘系統線路分析 HSE時鐘 HSI時鐘 LSE時鐘 LSI時鐘 PPLCLK ---鎖相環時鐘 SYSCLK ---系統時鐘 HCLK時鐘 PCLK1時鐘 PCLK2時鐘 3、時鐘樹簡圖 4、構成部分作用分析 二、時鐘樹&#xff1a;M4-…

35.x64匯編寫法(二)

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 本次游戲沒法給 內容參考于&#xff1a;微塵網絡安全 上一個內容&#xff1a;34.x64匯編寫法&#xff08;一&#xff09; 上一個內容寫了&#xff0c;匯編調…

鉤子函數的作用(register_hook)

鉤子函數僅在backward()時才會觸發。其中&#xff0c;鉤子函數接受梯度作為輸入&#xff0c;返回操作后的梯度&#xff0c;操作后的梯度必須要輸入的梯度同類型、同形狀&#xff0c;否則報錯。 主要功能包括&#xff1a; 監控當前的梯度&#xff08;不返回值&#xff09;&…

【頭歌實驗】Keras機器翻譯實戰

【頭歌實驗】Keras機器翻譯實戰 第1關&#xff1a;加載原始數據 編程要求 根據提示&#xff0c;在右側編輯器補充代碼&#xff0c;實現load_data函數&#xff0c;該函數需要加載path所代表的文件中的數據&#xff0c;并將文件中所有的內容按\n分割&#xff0c;轉換成一個列表…

python中使用高并發分布式隊列庫celery的那些坑

python中使用高并發分布式隊列庫celery的那些坑 &#x1f31f; 簡單理解&#x1f6e0;? 核心功能&#x1f680; 工作機制&#x1f4e6; 示例代碼&#xff08;使用 Redis 作為 broker&#xff09;&#x1f517; 常見搭配&#x1f4e6; 我的環境&#x1f4e6;第一個問題&#x1…

截圖工具 Snipaste V2.10.7(2025.06.2更新)

—————【下 載 地 址】——————— 【?本章下載一】&#xff1a;https://pan.xunlei.com/s/VORklK9hcuoI6n_qgx25jSq2A1?pwde7bi# 【?本章下載二】&#xff1a;https://pan.quark.cn/s/7c62f8f86735 【百款黑科技】&#xff1a;https://ucnygalh6wle.feishu.cn/wiki/…

batch_size 參數最優設置

在深度學習訓練中,batch_size(批量大小)的選擇是一個需要權衡的問題,既不是越大越好,也不是越小越好,而是需要根據硬件資源、數據規模、模型復雜度和優化目標等因素綜合決定。以下是詳細分析:

【agent開發】部署LLM(一)

本周基本就是在踩坑&#xff0c;沒什么實質性的進展 下載模型文件 推薦一個網站&#xff0c;可以簡單計算下模型推理需要多大顯存&#xff1a;https://apxml.com/tools/vram-calculator 我的顯卡是RTX 4070&#xff0c;有12GB的顯存&#xff0c;部署一個1.7B的Qwen3應該問題…

大數據-274 Spark MLib - 基礎介紹 機器學習算法 剪枝 后剪枝 ID3 C4.5 CART

點一下關注吧&#xff01;&#xff01;&#xff01;非常感謝&#xff01;&#xff01;持續更新&#xff01;&#xff01;&#xff01; 大模型篇章已經開始&#xff01; 目前已經更新到了第 22 篇&#xff1a;大語言模型 22 - MCP 自動操作 FigmaCursor 自動設計原型 Java篇開…

flutter常用動畫

Flutter 動畫基礎概念 術語解釋Animation表示動畫的值&#xff0c;通常是一個 double (0.0 ~ 1.0) 或其他數值。AnimationController管理動畫的時間進度和狀態。需要 Ticker (vsync) 來驅動。Tween定義動畫的取值范圍&#xff0c;如從 0.0 到 1.0&#xff0c;從紅色到藍色。Cu…

Python打卡DAY43

復習日 作業&#xff1a; kaggle找到一個圖像數據集&#xff0c;用cnn網絡進行訓練并且用grad-cam做可視化 進階&#xff1a;并拆分成多個文件 我選擇ouIntel Image Classification | Kagglezz&#xff0c;該數據集分為六類&#xff0c;包含建筑、森林、冰川、山脈、海洋和街道…

從多巴胺的誘惑到內啡肽的力量 | 個體成長代際教育的成癮困局與破局之道

注&#xff1a;本文為“多巴胺&#xff0c;內啡肽”相關文章合輯。 圖片清晰度受引文原圖所限。 略作重排&#xff0c;未整理去重。 如有內容異常&#xff0c;請看原文。 年少偏愛多巴胺&#xff0c;中年才懂內啡肽 摘要 &#xff1a;本文通過生活實例與科學研究相結合的方式…

【音視頻】H265 NALU分析

1 H265 概述 H264 與 H265 的區別 傳輸碼率&#xff1a;H264 由于算法優化&#xff0c;可以低于 2Mbps 的速度實現標清數字圖像傳送&#xff1b;H.265 High Profile 可實現低于 1.5Mbps 的傳輸帶寬下&#xff0c;實現 1080p 全高清視頻傳輸。 編碼架構&#xff1a;H.265/HEVC…

Python訓練營打卡 Day26

知識點回顧&#xff1a; 函數的定義變量作用域&#xff1a;局部變量和全局變量函數的參數類型&#xff1a;位置參數、默認參數、不定參數傳遞參數的手段&#xff1a;關鍵詞參數傳遞參數的順序&#xff1a;同時出現三種參數類型時 ——————————————————————…

PH熱榜 | 2025-05-29

1. Tapflow 2.0 標語&#xff1a;將你的文檔轉化為可銷售的指導手冊、操作手冊和工作流程。 介紹&#xff1a;Tapflow 2.0將各類知識&#xff08;包括人工智能、設計、開發、營銷等&#xff09;轉化為有條理且可銷售的產品。現在你可以導入文件&#xff0c;讓人工智能快速為你…

GitHub 趨勢日報 (2025年05月30日)

&#x1f4ca; 由 TrendForge 系統生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日報中的項目描述已自動翻譯為中文 &#x1f4c8; 今日獲星趨勢圖 今日獲星趨勢圖 833 agenticSeek 789 prompt-eng-interactive-tutorial 466 ai-agents-for-beginn…

Cesium 8 ,在 Cesium 上實現雷達動畫和車輛動畫效果,并控制顯示和隱藏

目錄 ?前言 一、功能背景 1.1 核心功能概覽 1.2 技術棧與工具 二、車輛動畫 2.1 模型坐標 2.2 組合渲染 2.3 顯隱狀態 2.4 模型文件 三、雷達動畫 3.1 創建元素 3.2 動畫解析 3.3 坐標聯動 3.4 交互事件 四、完整代碼 4.1 屬性參數 4.2 邏輯代碼 加載車輛動畫…

相機--相機標定

教程 相機標定分類 相機標定分為內參標定和外參標定。 內參標定 目的 作用 原理 外參標定

JS手寫代碼篇---手寫類型判斷函數

9、手寫類型判斷函數 手寫完成這個函數&#xff1a;輸入一個對象(value)&#xff0c;返回它的類型 js中的數據類型&#xff1a; 值類型&#xff1a;String、Number、Boolean、Null、Undefied、Symbol引用類型&#xff1a;Object、Array、Function、RegExp、Date 使用typeOf…