優選算法系列(前綴和 _下) k

目錄

五:和為 k 的子數組(medium)

題目鏈接:560. 和為 K 的子數組 - 力扣(LeetCode)

解法:

代碼:

六:和可被 K 整除的子數組(medium)

題目鏈接:974. 和可被 K 整除的子數組 - 力扣(LeetCode)

解法:

代碼:

七:連續數組(medium)

題目鏈接:525. 連續數組 - 力扣(LeetCode)

解法:

代碼:

八:矩陣區域和(medium)

題目鏈接:1314. 矩陣區域和 - 力扣(LeetCode)

解法:

代碼:


五:和為 k 的子數組(medium)

題目鏈接:560. 和為 K 的子數組 - 力扣(LeetCode)

解法:

解法二(前綴和):
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++:

java:

六:和可被 K 整除的子數組(medium)

題目鏈接:974. 和可被 K 整除的子數組 - 力扣(LeetCode)

(本題是某一年的藍橋杯競賽原題)

解法:

前置知識:
  • 同余定理
如果 (a - b) % n == 0 ,那么我們可以得到?個結論: a % n == b % n 。?文字敘述就是,如果兩個數相減的差能被 n 整除,那么這兩個數對 n 取模的結果相同。
例如: (26 - 2) % 12 == 0 ,那么 26 % 12 == 2 % 12 == 2
  • c++ 中負數取模的結果,以及如何修正「負數取模」的結果
a. c++ 中關于負數的取模運算,結果是「把負數當成正數,取模之后的結果加上?個負號」。
例如: -1 % 3 = -(1 % 3) = -1
b. 因為有負數,為了防?發?「出現負數」的結果,以 (a % n + n) % n 的形式輸出保證為正。
例如: -1 % 3 = (-1 % 3 + 3) % 3 = 2
算法思路:
思路與上 道題的思路相似。
i 為數組中的任意位置,用? sum[i] 表示? [0, i] 區間內所有元素的和。
想知道有多少個「以 i 為結尾的可被 k 整除的子數組」,就要找到有多少個起始位置為 x1, x2, x3... 使得? [x, i] 區間內的所有元素的和可被 k 整除。
[0, x - 1] 區間內所有元素之和等于 a [0, i] 區間內所有元素的和等于 b ,可得
(b - a) % k == 0
由同余定理可得, [0, x - 1] 區間與 [0, i] 區間內的前綴和同余。于是問題就變成:
  • 找到在 [0, i - 1] 區間內,有多少前綴和的余數等于 sum[i] % k 的即可。
我們不用真的初始化?個前綴和數組,因為我們只關心在 i 位置之前,有多少個前綴和等于
sum[i] - k 。因此,我們僅需用?個哈希表,?邊求當前位置的前綴和,?邊存下之前每?種前
綴和出現的次數。

代碼:

C++:

java:

七:連續數組(medium)

題目鏈接:525. 連續數組 - 力扣(LeetCode)

解法:

稍微轉化?下題目,就會變成我們熟悉的題:
本題讓我們找出?段連續的區間, 0 1 出現的次數相同。
如果將 0 記為 -1 1 記為 1 ,問題就變成了找出?段區間,這段區間的和等于 0
于是,就和 560. 和為 K 的子數組 這道題的思路?樣
i 為數組中的任意位置,? sum[i] 表示 ? [0, i] 區間內所有元素的和。
想知道最?的「以 i 為結尾的和為 0 的子 0數1組」,就要找到從左往右第?個 x1 使得 [x1, i]
區間內的所有元素的和為 0 。那么 [0, x1 - 1] 區間內的和是不是就是 sum[i] 了。于是問題
就變成:
找到在 [0, i - 1] 區間內,第?次出現 sum[i] 的位置即可。
我們不?真的初始化?個前綴和數組,因為我們只關?在 i 位置之前,第?個前綴和等于 sum[i]
的位置。因此,我們僅需??個哈希表,?邊求當前位置的前綴和,?邊記錄第?次出現該前綴和的
位置。

代碼:

C++:

java:

八:矩陣區域和(medium)

題目鏈接:1314. 矩陣區域和 - 力扣(LeetCode)

解法:

?維前綴和的簡單應用題,關鍵就是我們在填寫結果矩陣的時候,要找到原矩陣對應區域的「左上
角」以及「右下角」的坐標(推薦畫圖)
回顧:
左上?坐標: x1 = i - k y1 = j - k ,但是由于會「超過矩陣」的范圍,因此需要對 0 取?個 max 。因此修正后的坐標為: x1 = max(0, i - k), y1 = max(0, j - k) ;
右下?坐標: x1 = i + k y1 = j + k ,但是由于會「超過矩陣」的范圍,因此需要對 m - 1 ,以及 n - 1 取?個 min 。因此修正后的坐標為: x2 = min(m - 1, i + k) ,?? y2 = min(n - 1, j + k) 。
然后將求出來的坐標代入到「二維前綴和矩陣」的計算公式上即可~(但是要注意下標的映射關
系)

代碼:

C++:

java:

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

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

相關文章

mac m3 pro 部署 stable diffusion webui

什么是Stable Diffusion WebUI ? Stable Diffusion WebUI 是一個基于Stable Diffusion模型開發的圖形用戶界面(GUI)工具。通過這個工具,我們可以很方便的基于提示詞,描述一段文本來指導模型生成相應的圖像。相比較通過…

OpenCV圖像拼接(6)根據權重圖對源圖像進行歸一化處理函數normalizeUsingWeightMap()

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 cv::detail::normalizeUsingWeightMap 是 OpenCV 中用于圖像拼接細節處理的一個函數。它根據權重圖對源圖像進行歸一化處理,通常用于…

23種設計模式-外觀(Facade)設計模式

外觀設計模式 🚩什么是外觀設計模式?🚩外觀設計模式的特點🚩外觀設計模式的結構🚩外觀設計模式的優缺點🚩外觀設計模式的Java實現🚩代碼總結🚩總結 🚩什么是外觀設計模式…

capl語言基礎語法(二)

1.strncpy:將字符串復制到另一個字符串中。 輸入: dest 是目標字符串。 src 是源字符串。 n 是要復制的最大字符數。 語法: char *strncpy(char *dest, const char *src, size_t n); 例子: strncpy(gStringRep,"",…

QLoRA和LoRA 微調

QLoRA 其實是一種結合了量化和 LoRA 微調技術的統一方法,而不是同時使用兩種不同的微調方式。換句話說,QLoRA 的意思就是:先把大模型的主權重用低精度(例如 4-bit)量化,從而大幅減少存儲需求;然…

Qt Concurrent 并發 Map 和 Map-Reduce

并發 Map 和 Map-Reduce QtConcurrent::map()會對容器中的每個項目應用一個函數,對項目進行就地修改。QtConcurrent::mapped() 類似于 map(),但它返回的是一個包含修改內容的新容器。QtConcurrent::mappedReduced() 類似于 mapped(),只不過修…

RT-Thread-線程管理

一、線程管理 RT_Thread線程管理主要是實現線程管理和調度,線程分為用戶線程和系統線程。RT_Thread的線程調度器是搶占式的,尋找就緒狀態最高優先級線程。 線程管理的API函數 創建線程函數 rt_thread_t rt_thread_create( const char *name, //線程名稱 …

【CC2530 教程 十二】CC2530 Z-Stack 硬件抽象層

目錄 一、硬件抽象層簡介: (1)HAL 硬件抽象層是什么? (2)通俗易懂的解釋: (3)具體例子: 二、硬件抽象層HAL: (1)HAL…

Linux如何判斷磁盤是否已分區?

在 Linux 系統中,判斷磁盤是否已分區可通過以下方法實現: 方法 1:使用 fdisk -l 命令 此命令會列出所有磁盤及其分區的詳細信息: sudo fdisk -l輸出解讀: 若磁盤(如 /dev/sdb)下有類似 /dev/…

《熔化焊接與熱切割作業》考試注意事項

考試前的準備 攜帶必要的證件和材料:考生需攜帶身份證、準考證等有效證件,以及考試所需的焊接工具、材料等。確保證件齊全,避免因證件問題影響考試。 提前檢查焊接設備和工具:在考試前,考生應仔細檢查焊接設備和工具是…

Matlab Hessian矩陣計算(LoG算子)

文章目錄 一、簡介二、實現代碼三、實現效果參考資料一、簡介 圖像的Hessian矩陣用于描述圖像灰度值的二階導數,可以用來分析圖像的局部曲率和變化。例如,在圖像邊緣檢測、特征點檢測等任務中,Hessian矩陣能幫助我們識別圖像的結構。 Hessian矩陣定義 對于二維圖像,Hessian…

selenium之處理彈框(alert、confirm、prompt)

彈框 WebDriver提供了一個API, 用于處理JavaScript提供的三種類型的原生彈窗消息. 這些彈窗由瀏覽器提供限定的樣式.;分別為以下三種 alerts警告框confirm確認框prompt提示框 話不多說,開始實踐下就知道怎么一回事了 alerts 警告框,顯示…

Visual Studio 2019 Qt QML 項目環境搭建常見問題處理方法

在 Visual Studio 2019 運行 Qt/QML 項目比直接使用QtCreator環境麻煩,主要是有qmake 的一些配置項不能在 Visual Studio中設置。下面整理一些常見問題的處理方法,供參考: 搭建VS Qt 環境,在Visual Studios 2019下面安裝 Qt Vis…

【Linux】POSIX信號量與基于環形隊列的生產消費者模型

目錄 一、POSIX信號量: 接口: 二、基于環形隊列的生產消費者模型 環形隊列: 單生產單消費實現代碼: RingQueue.hpp: main.cc: 多生產多消費實現代碼: RingQueue.hpp: main.…

RAG優化:python從零實現GraphRag 一場文檔與知識的“戀愛”之旅

嘿,親愛的算法工程師們,準備好迎接一場文檔與知識的“戀愛”之旅了嗎?今天我們要介紹的 Graph RAG,就像是一位“紅娘”,幫助文檔和知識在圖的世界里找到彼此,擦出智慧的火花! 文章目錄 為什么需要 Graph RAG?Graph RAG 的“戀愛秘籍”準備好了嗎?讓我們開始吧!環境設…

深入 SVG:矢量圖形、濾鏡與動態交互開發指南

1.SVG 詳細介紹 SVG(Scalable Vector Graphics) 是一種基于 XML 的矢量圖形格式,用于描述二維圖形。 1. 命名空間 (Namespace) ★ 了解 命名空間 URI:http://www.w3.org/2000/svg 用途:在 XML 或 XHTML 中區分不同標…

HTTPS 加密過程詳解

HTTPS 的核心組成是 HTTP 協議與 SSL/TLS 加密層的結合,通過加密傳輸、身份驗證和完整性校驗機制,確保數據安全。其加密過程通過以下方式保障數據的機密性、完整性和身份驗證: 一、HTTPS 的核心組成 1. HTTP 協議 作為基礎通信協議&#xf…

嵌入式硬件工程師從小白到入門-速通版(一)

嵌入式硬件工程師從小白到入門:知識點速通與實戰指南 一、基礎硬件知識體系 電子電路基礎 基本概念:電流、電壓、電阻、電容、電感等;電路分析:歐姆定律、基爾霍夫定律、戴維南定理;元器件特性:二極管、三極…

SpringBoot通過Map實現天然的策略模式

😊 作者: 一恍過去 💖 主頁: https://blog.csdn.net/zhuocailing3390 🎊 社區: Java技術棧交流 🎉 主題: SpringBoot通過Map實現天然的策略模式 ?? 創作時間: 202…

WordPress WooCommerce 本地文件包含漏洞(CVE-2025-1661)

免責聲明 僅供網絡安全研究與教育目的使用。任何人不得將本文提供的信息用于非法目的或未經授權的系統測試。作者不對任何由于使用本文信息而導致的直接或間接損害承擔責任。如涉及侵權,請及時與我們聯系,我們將盡快處理并刪除相關內容。 一:產品介紹 HUSKY – WooCommer…