【优选算法必刷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

OpenClaw 原版和汉化版windows 和Linux 下的部署实践

OpenClaw 原版和汉化版windows 和Linux 下的部署实践

简介 OpenClaw(曾用名:Clawdbot、Moltbot),一款可以部署在个人电脑上的AI代理,采用“龙虾”图标设计,slogan是“The AI that actually does things”,由程序员彼得·斯坦伯格开发。 核心开发语言为TypeScript, 是一个采用“龙虾”图标设计的开源AI智能体项目。该项目定位为个人AI代理,具备操作软件与长期记忆功能。2026年1月,特斯拉前AI主管Karpathy曾公开提及此项目。 * 官方版本:https://github.com/openclaw/openclaw * 官方文档:https://docs.openclaw.ai/zh-CN * 汉化版:https://github.com/jiulingyun/openclaw-cn * 汉化版官网:https://clawd.org.cn/ 一.

By Ne0inhk
Flutter 组件 platform_utils 的适配 鸿蒙Harmony 实战 - 驾驭设备特征感知、实现鸿蒙全场景跨平台系统属性标准化提取方案

Flutter 组件 platform_utils 的适配 鸿蒙Harmony 实战 - 驾驭设备特征感知、实现鸿蒙全场景跨平台系统属性标准化提取方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 platform_utils 的适配 鸿蒙Harmony 实战 - 驾驭设备特征感知、实现鸿蒙全场景跨平台系统属性标准化提取方案 前言 在鸿蒙(OpenHarmony)生态的全场景开发中,我们面对的是从仅有几十 KB 内存的嵌入式模组,到拥有 2K 分辨率的大屏智慧终端,再到性能卓越的鸿蒙旗舰手机。作为一个追求极致体验的开发者,我们经常需要回答这样一个问题:“我的代码现在到底是运行在哪一个档位的鸿蒙设备上?” 我们需要确切知道当前的系统版本以开启特定的 API,需要知道屏幕的像素密度(DPI)以适配精细的图标,更需要一套能抹平 Android/iOS/OpenHarmony 平台差异的统一查询接口。 platform_utils 为 Flutter 提供了一层极其轻盈的设备特性抽象。适配到鸿蒙平台后,它不仅能作为我们业务逻辑的分发开关,更是我们构建“一套代码,多形形态自适应”鸿蒙应用的核心情报哨兵。

By Ne0inhk
Linux 程序地址空间深度解析:虚拟地址背后的真相

Linux 程序地址空间深度解析:虚拟地址背后的真相

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 * 前言: * 一. 先看现象:打破你对 “地址” 的认知! * 二. 进程地址空间布局:内存的 "逻辑分区" * 2.1 地址空间分布详情 * 2.2 代码验证地址空间布局 * 三. 虚拟地址与物理地址:映射的核心逻辑 * 3.1 核心概念 * 3.2 父子进程地址映射的秘密 * 四. 内核数据结构:地址空间的 "管理者" * 4.1 mm_struct(内存描述符)

By Ne0inhk
鸿蒙跨平台实战:React Native在OpenHarmony上的AccessibilityInfo辅助功能开关详解

鸿蒙跨平台实战:React Native在OpenHarmony上的AccessibilityInfo辅助功能开关详解

鸿蒙跨平台实战:React Native在OpenHarmony上的AccessibilityInfo辅助功能开关详解 欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net 摘要:本文深入探讨React Native中AccessibilityInfo模块在OpenHarmony 6.0.0 (API 20)平台上的实现与应用。作为无障碍功能的核心组件,AccessibilityInfo提供了获取设备辅助功能状态的能力。文章将从技术原理出发,详细分析跨平台适配机制,并通过实战案例展示在OpenHarmony环境下的具体实现。所有代码示例基于React Native 0.72.5和TypeScript 4.8.4编写,已在AtomGitDemos项目中验证通过。读者将掌握如何开发符合无障碍标准的应用,确保在鸿蒙设备上提供一致的用户体验。 1. AccessibilityInfo组件介绍 AccessibilityInfo是React Native提供的核心无障碍功能模块,用于检测和响应设备辅助功能状态的变化。在Ope

By Ne0inhk