【优选算法必刷100题】第029-030题(前缀和):和为k的子数组,和可被k整除的子数组

【优选算法必刷100题】第029-030题(前缀和):和为k的子数组,和可被k整除的子数组

🔥个人主页:Cx330🌸

❄️个人专栏:《C语言》《LeetCode刷题集》《数据结构-初阶》《C++知识分享》

《优选算法指南-必刷经典100题》《Linux操作系统》:从入门到入魔

🌟心向往之行必能至


🎥Cx330🌸的简介:


目录

前言:

29. 和为k的子数组

算法原理(前缀和+哈希):

前缀和解法代码(C++):

博主手记(字体还请见谅哈):

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

算法原理(前缀和+哈希):

前置知识补充:

前缀和解法代码(C++):

博主手记(字体还请见谅哈):

结尾:


前言:
聚焦算法题实战,系统讲解三大核心板块:“精准定位最优解”——优选算法,“简化逻辑表达,系统性探索与剪枝优化”——递归与回溯,“以局部最优换全局高效”——贪心算法,讲解思路与代码实现,帮助大家快速提升代码能力

前缀和专题


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++):

class Solution { public: int subarraySum(vector<int>& nums, int k) { unordered_map<int,int> hash; hash[0]=1; int n=nums.size(); int sum=0,ret=0; for(auto x:nums) { sum+=x; if(hash.count(sum-k)) ++ret; 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++ 中关于负数的取模运算,结果是「把负数当成正数,取模之后的结果加上一个负号」。 例如:-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++):

class Solution { public: int subarraysDivByK(vector<int>& nums, int k) { unordered_map<int,int> hash; hash[0%k]=1;//0这个数的余数 int sum,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; } };

博主手记(字体还请见谅哈):


结尾:

总结:引入同余定理处理负数取模问题,同样采用哈希表优化查询效率,通过维护前缀和哈希表,将时间复杂度优化至O(n),展示了前缀和技巧在子数组统计问题中的高效应用

Read more

Flutter 组件 pos 适配鸿蒙 HarmonyOS 实战:ESC/POS 硬件协议通信,构建高性能零售收银与物联网打印架构

Flutter 组件 pos 适配鸿蒙 HarmonyOS 实战:ESC/POS 硬件协议通信,构建高性能零售收银与物联网打印架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 pos 适配鸿蒙 HarmonyOS 实战:ESC/POS 硬件协议通信,构建高性能零售收银与物联网打印架构 前言 在鸿蒙(OpenHarmony)生态迈向专业收银终端、涉及智慧零售设备、数字化仓储标签打印及餐饮自助化服务的背景下,如何实现与热敏打印机(Thermal Printer)等硬件设备的底噪、高可靠通讯,已成为决定商业应用“交易闭环效率”的关键。在鸿蒙设备这类强调硬件直控能力(Raw IO)与实时系统响应的环境下,如果应用依然依赖图形化的截屏打印或低效的中间件转发,由于由于图像编解码的巨大算力消耗,极易由于由于“内存瞬时溢出”导致收银终端在高峰期发生严重卡顿。 我们需要一种能够直接生成热敏指令流(Hex Commands)、支持多种传输通道(蓝牙/Wi-Fi/USB)且符合行业标准(ESC/POS)的高性能控制方案。 pos

By Ne0inhk
Flutter 组件 censor_it 适配鸿蒙 HarmonyOS 实战:离线内容净化墙,构建端侧敏感词过滤与合规性治理架构

Flutter 组件 censor_it 适配鸿蒙 HarmonyOS 实战:离线内容净化墙,构建端侧敏感词过滤与合规性治理架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 censor_it 适配鸿蒙 HarmonyOS 实战:离线内容净化墙,构建端侧敏感词过滤与合规性治理架构 前言 在鸿蒙(OpenHarmony)生态迈向内容社交、即时通讯及 UGC(用户生成内容)全场景覆盖的背景下,如何确保信息的合规性、在端侧拦截违规内容,已成为提升应用生态安全性与用户粘性的“风控红线”。在鸿蒙设备这类强调分布式隐私与绿色上网环境的终端上,如果内容过滤完全依赖云端接口,不仅会由于由于网络往返导致明显的交互滞后,更会由于由于频繁的 API 调用增加额外的运营成本。 我们需要一种能够在端侧执行高速扫描、支持动态字典更新且具备算法透明性的字符过滤引擎。 censor_it 为 Flutter 开发者引入了轻量级的敏感词过滤方案。它通过高效的字符串匹配算法,自动将预设的敏感源转化为可定制的和谐占位符。在适配到鸿蒙 HarmonyOS 流程中,这一组件能够作为鸿蒙应用内容发布的“安检门”,通过在前置环节对文本执行离线脱敏处理

By Ne0inhk
Flutter 第三方库 spa 的鸿蒙适配实战 - 打造单页应用架构、动态渲染路由状态及鸿蒙大屏多窗体验优化方案

Flutter 第三方库 spa 的鸿蒙适配实战 - 打造单页应用架构、动态渲染路由状态及鸿蒙大屏多窗体验优化方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 第三方库 spa 的鸿蒙适配实战 - 打造单页应用架构、动态渲染路由状态及鸿蒙大屏多窗体验优化方案 前言 随着移动端交互的日益复杂,用户对 App 的流畅度要求已不仅仅停留在“帧率”上,更多的是关于页面切换的“无缝感”。单页应用(Single Page Application, SPA)模式,通过在一个长生命周期的视图内动态替换内容节点,有效地避免了频繁的页面推栈(Push/Pop)带来的布局重绘开销。 spa 库是 Flutter 生态中一个非常独特且高效的路由增强工具。它将路由状态抽象为一套可观察的树状结构,让开发者能像管理 Web 应用一样管理 Flutter 的页面状态。 在鸿蒙系统(OpenHarmony)适配实战中,面对折叠屏的灵活切换和平板的多窗协同,spa 提供了一种天然的“响应式分发”基座。

By Ne0inhk
Spring Boot 数据仓库与ETL工具集成

Spring Boot 数据仓库与ETL工具集成

Spring Boot 数据仓库与ETL工具集成 26.1 学习目标与重点提示 学习目标:掌握Spring Boot数据仓库与ETL工具集成的核心概念与使用方法,包括数据仓库的定义与特点、ETL工具的定义与特点、Spring Boot与数据仓库的集成、Spring Boot与ETL工具的集成、Spring Boot的实际应用场景,学会在实际开发中处理数据仓库与ETL工具集成问题。 重点:数据仓库的定义与特点、ETL工具的定义与特点、Spring Boot与数据仓库的集成、Spring Boot与ETL工具的集成、Spring Boot的实际应用场景。 26.2 数据仓库与ETL工具概述 数据仓库与ETL工具是Java开发中的重要组件。 26.2.1 数据仓库的定义 定义:数据仓库是一种用于存储和管理大量结构化数据的数据库系统,用于支持企业级数据分析和决策。 作用: * 提供统一的数据存储。 * 支持复杂的数据分析。 * 提高决策效率。 常见的数据仓库: * Apache Hive:Apache Hive是一种基于Hadoop的数据仓库工具。 * Apache

By Ne0inhk