《算法闯关指南:优选算法--前缀和》--29.和为k的子数组,30.和可被k整除的子数组

《算法闯关指南:优选算法--前缀和》--29.和为k的子数组,30.和可被k整除的子数组
在这里插入图片描述

🔥草莓熊Lotso:个人主页
❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》
✨生活是默默的坚持,毅力是永久的享受!


🎬 博主简介:

在这里插入图片描述

文章目录


前言:

聚焦算法题实战,系统讲解三大核心板块:优选算法:剖析动态规划、二分法等高效策略,学会寻找“最优解”。 递归与回溯:掌握问题分解与状态回退,攻克组合、排列等难题。 贪心算法:理解“局部最优”到“全局最优”的思路,解决区间调度等问题 内容以题带点,讲解思路与代码实现,帮助大家快速提升代码能力。

29. 和为k的子数组

题目链接

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++算法代码:

classSolution{public:intsubarraySum(vector<int>& nums,int k){ unordered_map<int,int>hash; hash[0]=1;int sum=0,ret=0;for(auto x:nums){ sum+=x;if(hash.count(sum-k)) ret+=hash[sum-k]; hash[sum]++;}return ret;}};

算法总结&&笔记展示:

笔记字有点丑,大家见谅:

在这里插入图片描述

30. 和可被k整除的子数组

题目链接

974. 和可被 K 整除的子数组 - 力扣(LeetCode)

题目描述

在这里插入图片描述

题目示例

在这里插入图片描述

解法(前缀和+哈希表):

前置知识补充:

同余定理:
如果 (a-b) % n == 0,那么我们就可以得到一个结论:a % n == b%n。用文字叙述就是,如果两个数相减的差能够被n整除,那么这两个数对n取模的结果相同。
例如:(26-2) % 12 == 0,那么 26 % 12 == 2 % 12 == 2

C++ 中负数取模的结果,以及修正【负数取模】的结果:

  • C++ 中关于负数的取模运算,结果是【把负数当成正数,取模之后的结果加上一个负号】。
    例如:-1 % 3 = -(1 % 3) = -1
  • 因为有负数,为了防止发生【出现负数】的结果,以 (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++算法代码:

classSolution{public:intsubarraysDivByK(vector<int>& nums,int k){ unordered_map<int,int> hash; hash[0%k]=1;int sum=0,ret=0;for(auto x:nums){ sum+=x;int r=(sum%k+k)%k;//修正后的余数if(hash.count(r)) ret+=hash[r]; hash[r]++;}return ret;}};

算法总结&&笔记展示:

笔记字有点丑,大家见谅:

在这里插入图片描述

结尾:

🍓 我是草莓熊 Lotso!若这篇技术干货帮你打通了学习中的卡点: 👀 【关注】跟我一起深耕技术领域,从基础到进阶,见证每一次成长 ❤️ 【点赞】让优质内容被更多人看见,让知识传递更有力量 ⭐ 【收藏】把核心知识点、实战技巧存好,需要时直接查、随时用 💬 【评论】分享你的经验或疑问(比如曾踩过的技术坑?),一起交流避坑 🗳️ 【投票】用你的选择助力社区内容方向,告诉大家哪个技术点最该重点拆解 技术之路难免有困惑,但同行的人会让前进更有方向~愿我们都能在自己专注的领域里,一步步靠近心中的技术目标! 

结语:聚焦算法题实战,系统讲解三大核心板块:优选算法:剖析动态规划、二分法等高效策略,学会寻找“最优解”。 递归与回溯:掌握问题分解与状态回退,攻克组合、排列等难题。 贪心算法:理解“局部最优”到“全局最优”的思路,解决区间调度等问题 内容以题带点,讲解思路与代码实现,帮助大家快速提升代码能力。

✨把这些内容吃透超牛的!放松下吧✨ʕ˘ᴥ˘ʔづきらど

Read more

【Python】家庭用电数据分析Prophet预测

【Python】家庭用电数据分析Prophet预测

数据集:Household Electricity Consumption | Kaggle 目录 数据集简介 探索性分析 Prophet预测 Prophet模型 Prophet理念 Prophet优点 数据集简介 240000-household-electricity-consumption-records数据集包含了一个家庭6个月的用电数据,收集于2007年1月至2007年6月。这些数据包括全球有功功率、全球无功功率、电压、全球强度、分项计量1(厨房)、分项计量2(洗衣房)和分项计量3(电热水器和空调)等信息。该数据集共有260,640个测量值。 列名说明Date日期Time时间Globalactivepower该家庭所消耗的总有功功率(千瓦)Globalreactivepower该家庭消耗的总无功功率(千瓦)Voltage向家庭输送电力的电压(伏特)Global_intensity输送到家庭的平均电流强度(安培)Submetering1厨房消耗的有功功率(千瓦)Submetering2洗衣房所消耗的有功功率(千瓦)Submetering3电热水

By Ne0inhk
python协同过滤算法django餐厅推荐系统

python协同过滤算法django餐厅推荐系统

目录 * 协同过滤算法基础 * Django系统架构设计 * 推荐引擎实现 * 性能优化与冷启动问题 * 前端交互与API设计 * 评估与部署 * 开发技术路线 * 源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 协同过滤算法基础 协同过滤分为基于用户的协同过滤(User-Based CF)和基于物品的协同过滤(Item-Based CF)。核心思想是通过用户历史行为数据(如评分、点击)计算相似度,预测未评分项目的偏好。 * 相似度计算:常用余弦相似度、皮尔逊相关系数。 * 余弦相似度公式: [ \text{sim}(u, v) = \frac{\sum_{i \in I_{uv}} r_{ui} \cdot r_{vi}}{\sqrt{\sum_{i \in I_{u}} r_

By Ne0inhk
Go、Rust、Kotlin、Python 与 Java 从性能到生态,全面解读五大主流编程语言

Go、Rust、Kotlin、Python 与 Java 从性能到生态,全面解读五大主流编程语言

文章目录 * 从性能到生态,全面解读五大主流编程语言 * 一、语言定位与设计哲学:为何而生? * 二、性能对比:谁更快?谁更省资源? * 性能维度拆解 * 性能对比表(基于典型 Web API 场景) * 性能实测案例(斐波那契数列第45项) * 三、并发模型:谁更适合高并发? * 并发模型对比 * 四、错误处理机制:如何应对失败? * 示例:读取文件内容 * 五、类型系统:静态 vs 动态,强类型 vs 弱类型 * 空安全对比(防 NPE) * 六、内存管理:GC vs 所有权 * Rust 的“所有权”机制详解 * 七、生态系统与社区活跃度 * 典型生态代表

By Ne0inhk
Python 驱动浏览器自动化:Playwright + AI 的 2026 最佳实践

Python 驱动浏览器自动化:Playwright + AI 的 2026 最佳实践

摘要:在 Web 自动化领域,Selenium 曾经的霸主地位已成历史,Playwright 凭其“快、稳、强”的现代特性成为了新标准。而在 2026 年,随着 LLM(大语言模型)和视觉多模态模型的爆发,自动化测试与 RPA(机器人流程自动化)迎来了范式革命。本文将深度解析 Playwright 的核心架构,并手把手教你构建一个具备“自愈能力”的 AI 驱动自动化 Agent。本文超 7000 字,包含大量实战代码与反爬对抗技巧。 第一章:Selenium 已死,Playwright 当立? 1.1 自动化的“不可能三角” 长期以来,Web 自动化工程师都在速度、稳定性和抗检测性之间做取舍: * Selenium:

By Ne0inhk