《算法闯关指南:优选算法--前缀和》--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

Java安全开发实战:从代码防护到架构安全

Java安全开发实战:从代码防护到架构安全

第二十二章 Java安全开发实战:从代码防护到架构安全 一、章节学习目标与重点 1.1 学习目标 * 理解Java应用面临的核心安全威胁(注入攻击、跨站脚本、权限漏洞等),掌握安全开发的核心原则与防护体系。 * 熟练运用代码级安全防护技巧,解决SQL注入、XSS、CSRF、文件上传漏洞等常见安全问题。 * 掌握认证授权机制的安全设计(密码加密、JWT安全、OAuth2.0实战),避免权限越界与身份伪造。 * 实现微服务架构下的安全防护(API网关安全、服务间通信加密、配置中心安全),构建端到端安全体系。 * 能够独立完成Java应用的安全审计与漏洞排查,结合实际场景制定安全加固方案并落地。 1.2 学习重点 * Java应用常见安全漏洞(SQL注入、XSS、CSRF等)的原理与代码级防护。 * 认证授权安全:密码加密存储、JWT令牌安全、RBAC权限模型实战。 * 微服务安全:网关安全防护、服务间HTTPS通信、配置与敏感数据加密。 * 安全审计与漏洞排查工具(SonarQube、OWASP

By Ne0inhk
MySQL SQL注入防御全攻略:原理、攻击与防护实践

MySQL SQL注入防御全攻略:原理、攻击与防护实践

MySQL SQL注入防御全攻略:原理、攻击与防护实践 * 一、SQL注入基础概念 * 1.1 什么是SQL注入? * 1.2 注入攻击的危害等级 * 二、SQL注入攻击原理剖析 * 2.1 典型注入场景分析 * 2.1.1 登录绕过攻击 * 2.1.2 数据泄露攻击 * 2.2 注入类型分类 * 三、防御技术深度解析 * 3.1 参数化查询(Prepared Statements) * 3.1.1 PHP实现示例 * 3.1.2 Java实现示例 * 3.2 输入验证与过滤 * 3.2.1 白名单验证

By Ne0inhk
Flutter 组件 meeting_place_core 的适配 鸿蒙Harmony 实战 - 驾驭分布式会议引擎、实现鸿蒙端高性能协作空间与复杂信令分发方案

Flutter 组件 meeting_place_core 的适配 鸿蒙Harmony 实战 - 驾驭分布式会议引擎、实现鸿蒙端高性能协作空间与复杂信令分发方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 meeting_place_core 的适配 鸿蒙Harmony 实战 - 驾驭分布式会议引擎、实现鸿蒙端高性能协作空间与复杂信令分发方案 前言 在后疫情时代的协同办公浪潮中,视频会议已经从单一的垂直应用演变为鸿蒙(OpenHarmony)生态中“泛在协作”的核心基础设施。当你在鸿蒙平板上开启一场跨国技术评审,或者在鸿蒙车机上紧急连线公司晨会时,支撑这一切流畅运行的,是底层极其复杂的会议核心引擎。 meeting_place_core 是一套工业级的、专为多端同步设计的会议核心抽象包。它不负责 UI 渲染,而是专注于房间管理(Room Management)、成员状态流转、信令推送及媒体流的逻辑编排。 适配到鸿蒙平台后,结合鸿蒙强大的分布式能力,meeting_place_core 能让你的 App 轻松实现“手机开会,大屏投映,

By Ne0inhk
解决Google Scholar “We‘re sorry... but your computer or network may be sending automated queries.”的问题

解决Google Scholar “We‘re sorry... but your computer or network may be sending automated queries.”的问题

解决Google Scholar “We’re sorry… but your computer or network may be sending automated queries.”的问题 在使用Google Scholar进行学术搜索时,你可能会遇到错误提示: “We’re sorry… but your computer or network may be sending automated queries. To protect our users, we can’t process your request right now. See Google Help for more information.

By Ne0inhk