【算法】前綴和算法——和為k的子數組之和

題解:和為k的子數組之和(前綴和算法)

目錄

  • 1.題目
  • 2.題解思路
    • 2.1前綴和 + 哈希表,算法步驟:
    • 2.2細節如下:
    • 2.3參考代碼:
  • 3.總結及思考

1.題目

題目鏈接:LINK
在這里插入圖片描述

2.題解思路

暴力求解自然不用多說,時間復雜度是O(N^2)

可以用前綴和算法來進行求解,但是要做適當的轉換。

2.1前綴和 + 哈希表,算法步驟:

首先,我們在遍歷的時候要按照以i位置為結尾的子數組進行遍歷。
在這里插入圖片描述
第二,要與前綴和相結合
我們要求的是和為k的子數組,可以轉換為誰前綴和為sum[i] - k
在這里插入圖片描述

第三,我們計算出前綴和如果挨個遍歷前綴和數組來找誰等于sum[i] - k的話時間復雜度還是O(N^2),因而我們要借助哈希表把每次找sum[i] - k值從O(N) 降到O(1)

在這里插入圖片描述
在這里插入圖片描述

2.2細節如下:

在這里插入圖片描述

2.3參考代碼:

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;             // 計算當前位置的前綴和int target = sum - k; // 本次我們哈希表中要找的目標值if (hash.count(target))ret += hash[target]; // 統計個數hash[sum]++; // 將該次前綴和入到哈希表中,供下次使用}return ret;}
};

3.總結及思考

我感覺這個題目解法好難理解,雖然這個方法可行,但是還是有一些地方我感覺不太明白。

1.為什么不能用雙指針(滑動窗口來做)?
因為這個題目數組 不具有單調性(有負數), 兩個指針不能一直同向移動。不滿足滑動窗口的使用前提條件。

2.為什么要將以i為開始的子數組轉換為以i為結尾的子數組???
因為要 為下一步使用前綴和做鋪墊

3.為什么要將前綴和數組用一個變量來替代?
因為 下一次所用的前綴和具有規律性,不用存著不需要的值

4.為什么要借助哈希表?
因為要 把每次找sum[i] - k的值的時間復雜度從O(N) --> O(1)


EOF

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

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

相關文章

【SQL】外連接 LEFT JOIN

目錄 一.內連接與外連接 1.內連接&#xff08;inner join&#xff09; 2.外連接&#xff08;outer join&#xff09; 二.兩表連接 1.我們先來試試看內連接&#xff1a; 2.我們再來試試外連接 三.單表外連接 四.總結 一.內連接與外連接 先得介紹內連接和外連接兩個概念&…

第199題|關于函數的周期性問題|函數強化訓練(六)|武忠祥老師每日一題 5月24日

解題思路&#xff1a;解這道題我們要用到下面這個結論 f(x)連續&#xff0c;以T為周期時&#xff0c;原函數以T為周期的充分必要條件是&#xff1a; (A) sin x顯然是以π為周期的&#xff0c;我們可以看到并不等于0,根據結論&#xff0c;A的原函數顯然不是周期函數。 (B) 的…

memmove使?和模擬實現

一&#xff1a;memmove的使? 這是memmove在庫里的定義&#xff0c;具體可在cplusplus.com查看 void * memmove ( void * destination, const void * source, size_t num ) ? 和memcpy的差別就是memmove函數處理的源內存塊和?標內存塊是可以重疊的。 ? 如果源空間和?標…

你以為的私域是真正的私域嘛??你的私域流量真的屬于你嘛?

大家好 我是一個軟件開發公司的產品經理 專注私域電商行業7年有余 您的私域流量是真正的屬于你自己嘛&#xff1f; 私域的定義 私域的界定&#xff1a;一個互聯網私有數據&#xff08;資產&#xff09;積蓄的載體。這個載體的數據權益私有&#xff0c;且具備用戶規則制定權…

Mysql 備份恢復 mysqldump與xtrabackup備份

1.1 備份的原因 備份是數據安全的最后一道防線&#xff0c;對于任何數據丟失的場景&#xff0c;備份雖然不一定能恢復百分之百的數據 (取決于備份周期)&#xff0c;但至少能將損失降到最低。衡量備份恢復有兩個重要的指標&#xff1a;恢復點目標(RPO) 和恢復時間目標(RTO)&…

數據庫常用命令(1)

DML 1.添加數據&#xff08;insert into&#xff09; insert into 表名 values (值1&#xff0c;值2....); 表示成功運行&#xff1a; 2.修改數據&#xff08;update&#xff09; update 表名 set 字段名1值1&#xff0c;字段名2值2.....【where條件】 3.刪除數據&#xff0…

元年科技數據智能研發部負責人張亞東受邀為第十三屆中國PMO大會演講嘉賓

全國PMO專業人士年度盛會 北京元年科技股份有限公司數據智能研發部負責人張亞東先生受邀為PMO評論主辦的2024第十三屆中國PMO大會演講嘉賓&#xff0c;演講議題為“大模型時代&#xff0c;AI創新型工具提升項目管理效率”。大會將于6月29-30日在北京舉辦&#xff0c;敬請關注&a…

jmeter之HTTP請求和查看結果樹

一、HTTP請求作用&#xff1a; 可以發送post或get請求等請求可以向服務器發送參數或消息體數據可以進行文件上傳 HTTP請求&#xff1a;是線程組內的取樣器最常用的的一個原件 二、查看界面 添加一個HTTP請求&#xff1a;選擇線程組–添加–取樣器–HTTP請求 默認界面 名稱和…

ThreadLocal為什么會導致內存泄漏?

問題引出&#xff1a; ThreadLocal是為了解決什么問題而產生的&#xff1f; ThreadLocal發生內存泄漏的根本原因是什么&#xff1f; 如何避免內存泄漏的發生&#xff1f;定義 為了解決多個線程同時操作程序中的同一個變量而導致的數據不一致性的問題。 ??假設現在有兩個線程A…

如何獲取一個城市或者一個區域的玫瑰風向圖?

玫瑰風向圖是一種直觀展示風向和風速的圖形工具&#xff0c;它在氣象學、城市規劃、農業等領域都有廣泛的應用。那么&#xff0c;如何獲取某個城市或某個區域的玫瑰風向圖呢&#xff1f; 首先&#xff0c;我們可以借助互聯網資源獲取玫瑰風向圖。現代網絡技術發達&#xff0c;…

前端 防抖和節流

在前端開發中&#xff0c;防抖&#xff08;Debounce&#xff09;和節流&#xff08;Throttle&#xff09;是兩種常用的性能優化技術&#xff0c;尤其在處理頻繁觸發的事件時顯得尤為重要。無論是在用戶輸入、窗口調整大小&#xff0c;還是滾動事件中&#xff0c;這兩種技術都可…

3D 生成重建011-LucidDreamer 優化SDS過平滑結果的一種探索

3D 生成重建011-LucidDreamer 優化SDS過平滑結果的一種探索 文章目錄 0論文工作1論文方法2 效果 0論文工作 文本到3D生成的最新進展標志著生成模型的一個重要里程碑&#xff0c;為在各種現實場景中創建富有想象力的3D資產打開了新的可能性。雖然最近在文本到3D生成方面的進展…

自建公式,VBA在Excel中解一元一次方程

自建公式,VBA在Excel中解一元一次方程 文章目錄 前言一、運行效果圖二、操作思路三、代碼1.去除方程中未知數,將未知數轉為“*0”2.計算方程中常數3.計算方程中未知數的系數一,先將未知數替換成“*1”4.計算方程中未知數的系數二5.計算方程得數前言 小學必考內容:一元一次…

掌握Python基本語法的終極指南【基本語法部分】

一、基本語法部分 1.簡單數據類型 1.1字符串類型及操作 字符串訪問&#xff1a; 1.索引訪問 mystr"Hello world" #索引訪問 print(mystr[0]) #H print(mystr[-1]) #d print(mystr[-7]) #o print(mystr[6]) #w 2.切片訪問 [頭下標&#xff1a;尾下標] &#x…

齊護K210系列教程(三十二)_在線模型訓練

在線模型訓練 概念理解準備工作1 采集圖像1.1 圖像要求1.2 使用K210采集圖片 2 標注圖像3 打包數據集4 上傳數據4.1創建項目4.1.1圖像分類創建項目4.1.2圖像檢測創建項目 4.2上傳數據4.2.1分類檢測上傳數據4.2.2圖像檢測上傳數據 5 訓練模型6 部署模型以及測試7 測試效果7.1圖像…

leetcode 152. 乘積最大子數組

. - 力扣&#xff08;LeetCode&#xff09; 給你一個整數數組 nums &#xff0c;請你找出數組中乘積最大的非空連續 子數組 &#xff08;該子數組中至少包含一個數字&#xff09;&#xff0c;并返回該子數組所對應的乘積。 測試用例的答案是一個 32-位 整數。 示例 1: 輸入…

MongoDB關系處理:優化數據管理、提升性能的最佳實踐

MongoDB 是一種 NoSQL 數據庫&#xff0c;它使用文檔模型來存儲數據&#xff0c;這與關系型數據庫&#xff08;RDBMS&#xff09;有顯著不同。本文將詳細介紹 MongoDB 中的關系處理&#xff0c;包括基本語法、命令、示例、應用場景、注意事項和總結。 基本語法 文檔和集合 M…

30.靜態代碼分析工具clang-tidy

文章目錄 基本介紹安裝clang-tidy使用clang-tidy配置文件和格式文件配置文件格式文件使用配置文件和格式化文件 在代碼中設置排除clang-tidy檢測reference 歡迎訪問個人網絡日志&#x1f339;&#x1f339;知行空間&#x1f339;&#x1f339; 基本介紹 clang-tidy 是一個基于…

JDBC總結

目錄 JDBC(java database connection) JDBC連接數據庫步驟: 1. 在項目中添加jar文件,如圖所示 2.加載驅動類 向數據庫中插入數據代碼示例: 第一種: 第二種: 查詢操作 : 第一種: 第二種: JDBC(java database connection) java數據庫連接.api(應用程序編程接口) ,可…

Java中的垃圾回收機制

在Java編程語言中&#xff0c;垃圾回收&#xff08;Garbage Collection, GC&#xff09;機制是內存管理的一個核心部分。它的主要目標是自動釋放那些不再被程序使用的對象所占用的內存空間&#xff0c;從而防止內存泄漏&#xff0c;并確保程序的穩定運行。下面&#xff0c;我將…