优选算法系列(前缀和 _下) 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.mzph.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…