《算法题讲解指南:优选算法-前缀和》--31.连续数组,32.矩阵区域和

《算法题讲解指南:优选算法-前缀和》--31.连续数组,32.矩阵区域和

🔥小叶-duck个人主页

❄️个人专栏《Data-Structure-Learning》

《C++入门到进阶&自我学习过程记录》《算法题讲解指南》--从优选到贪心

未择之路,不须回头
已择之路,纵是荆棘遍野,亦作花海遨游


目录

31. 连续数组

题目链接:

题目描述:

题目示例:

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

算法思路:

C++算法代码:

算法总结及流程解析:

32. 矩阵区域和

题目链接:

题目描述:

题目示例:

解法:

算法思路:

C++算法代码:

算法总结及流程解析:

结束语


31. 连续数组

题目链接:

525. 连续数组 - 力扣(LeetCode)

题目描述:

题目示例:

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

算法思路:

      稍微转换一下题目,就会变成我们熟悉的题:

  • 本题让我们找出一段连续的区间,0和1出现的次数相同。
  • 如果将0记为-1,1记为1,问题就变成了找出一段区间,这段区间的和等于0
  • 于是,就和之前做过的那个和为 k 的子数组的题思路类似了

      设 i 为数组中的任意位置,用 sum[i] 表示【0,i】区间内所有元素的和。
      想知道最大的【以 i 结尾的和为 0 的子数组】,就要找到从左往右第一个 x1 使得【x1,i】区间内所有元素的和为 0。那么【0,x1-1】区间内的和是不是就是 sum[ i ] 了。于是问题就变成:

  • 找到在【0,i - 1】区间内,第一次出现 sum[ i ] 的位置即可。

      我们还是不用真的初始化一个前缀和数组,因为我们只关心 i 位置之前,第一个前缀和等于 sum[ i ] 的位置,因此,我们仅需用一个哈希表,一边求当前位置的前缀和,一边记录第一次出现该前缀和的位置。

C++算法代码:

class Solution { public: int findMaxLength(vector<int>& nums) { unordered_map<int, int> hash; int len = 0; int sum = 0; hash[0] = -1; for(int i = 0; i < nums.size(); i++) { if(nums[i] == 0) { nums[i] = -1; } sum += nums[i]; if(hash.count(sum)) { len = max(len, i - hash[sum]); } else //当第一次遇见前缀和则哈希表存放对应的下标(保证长度最短) { //如果是重复遇见相同的前缀和,则只更新长度不存放到哈希表 //因为重复遇见的前缀和长度一定比第一次长,无需存放 hash[sum] = i; } } return len; } };

算法总结及流程解析:

32. 矩阵区域和

题目链接:

1314. 矩阵区域和 - 力扣(LeetCode)

题目描述:

题目示例:

解法:

算法思路:

      二维前缀和的简单应用题,关键就是我们在填写结果矩阵的时候,要找到原矩阵对于区域的【左上角】以及【右下角】的坐标(大家可以画图,我后面的笔记里会有)

  • 左上角坐标:x1 = i - k,y1 = j - k,但是由于可能会【超过矩阵】的范围,因此需要对 0 取一个 max。因此修正后的坐标为:x1 = max(0, i - k),y1 = max(0, j - k);
  • 右下角坐标:x2 = i + k,y2 = j + k,但是由于可能会【超过矩阵】的范围,因此需要对 m-1,以及 n - 1 取一个 min。因此修正后的坐标为:x2 = min(m-1, i+k),y2 = min(n-1, j+k)。

      然后将求出来的坐标代入到【二维前缀和矩阵】的计算公式上即可(但是要注意下标的映射关系)

C++算法代码:

class Solution { public: vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int k) { int m = mat.size(); int n = mat[0].size(); vector<vector<int>> sums(m + 1, vector<int>(n + 1, 0)); vector<vector<int>> ret(m, vector<int>(n, 0)); for(int i = 0; i < m; i++) { for(int j = 0; j < n; j++) { sums[i + 1][j + 1] = mat[i][j] + sums[i][j + 1] + sums[i + 1][j] - sums[i][j]; } } for(int i = 0; i < m; i++) { for(int j = 0; j < n; j++) { //max和min是为了处理越界情况 ret[i][j] = sums[min(m, i + 1 + k)][min(n, j + 1 + k)] - sums[max(0, i - k)][min(n, j + 1 + k)] - sums[min(m, i + 1 + k)][max(0, j - k)] + sums[max(0, i - k)][max(0, j - k)]; //i + 1和j + 1的目的就是为了和mat进行映射关系,sums[i + 1][j + 1] -> mat[i][j] //然后i - k实际上是i + 1 - k - 1,i + 1依然是与mat进行映射关系 } } return ret; } };

算法总结及流程解析:

结束语

      到此,31.连续数组,32.矩阵区域和 这两道算法题就讲解完了。连续数组 将0/1转换后用前缀和+哈希表寻找和为0的最长子数组;矩阵区域和 通过二维前缀和快速计算矩阵区域和,注意处理边界条件。希望大家能有所收获!

Read more

医疗AI场景下算法编程的深度解析(2026新生培训讲稿)(总结)

医疗AI场景下算法编程的深度解析(2026新生培训讲稿)(总结)

项目总结与完整Python程序 通过本书的学习,我们从医疗AI的基础知识出发,系统掌握了经典机器学习算法的原理与医疗应用,深入探讨了数据处理、特征工程、模型评估、可解释性、不平衡问题处理、模型融合等进阶技术,并在第16章中以ICU败血症早期预警系统为例,完整演示了从问题定义到模型部署的全流程。现在,我们将所有这些知识整合为一个统一的Python程序,实现败血症预测的端到端流程,包括: * 模拟生成符合MIMIC-III分布的数据集 * 数据预处理与特征工程 * 多模型训练(逻辑回归、随机森林、XGBoost) * 模型融合(Stacking) * 超参数调优与不平衡处理 * 模型评估(AUC、PR AUC、分类报告、混淆矩阵) * 可解释性分析(SHAP) * 阈值选择与决策曲线 * 模型保存与简单API示例 该程序可直接运行(需要安装相关库),可作为医疗AI项目的模板。 完整Python程序 # -*- coding: utf-8 -*-

By Ne0inhk
OpenAI发布GPT-5.3 Instant:幻觉率最高降低26.8%,2026全球AI模型排行榜

OpenAI发布GPT-5.3 Instant:幻觉率最高降低26.8%,2026全球AI模型排行榜

🔥 个人主页:杨利杰YJlio❄️ 个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》《Python》《Kali Linux》《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更简单,让重复的工作自动化 OpenAI发布GPT-5.3 Instant:幻觉率最高降低26.8%,2026全球AI模型排行榜 * 1 GPT-5.3 Instant 发布 * 2 本次升级三大核心能力 * 2.1 降低 AI 幻觉 * 2.2 减少不必要拒答 * 2.3 网络搜索能力升级 * 3 GPT-5.3 Instant 技术架构 * 4 GPT-5.3 vs

By Ne0inhk
OpenClaw 搭建全流程实战:从 0 部署到可控 AI Agent(附避坑与安全建议)

OpenClaw 搭建全流程实战:从 0 部署到可控 AI Agent(附避坑与安全建议)

近几个月,「AI Agent」成为技术圈的高频词,但大多数人停留在 Demo、插件和概念层。 真正能跑在本地 / 服务器、拥有真实权限、能持续执行任务的 Agent 并不多。 OpenClaw,正是目前少数几个工程完整、可部署、可二次开发的开源 AI Agent 框架之一。 这篇文章不讲愿景、不画饼,只讲怎么搭、怎么跑、怎么不翻车。 一、OpenClaw 到底是什么?先说清楚定位 一句话说明白: OpenClaw 是一个可部署在本地或服务器上的开源 AI Agent 框架,具备 Gateway(通信)、Dashboard(控制台)和 Skills(能力插件)三大核心模块。 和 ChatGPT / 插件的本质区别在于: 对比项普通 AI 工具OpenClaw运行位置云端本地

By Ne0inhk

安装 Node.js 22+,配置 OpenAI Node.js 库、Vercel AI SDK 基础环境

文章目录 * 一、安装 Node.js 22+ * 二、初始化项目与安装依赖 * 1. 新建项目文件夹,终端进入目录,执行初始化命令: * 2. 安装核心依赖: * 三、基础配置(关键步骤) * 1. 配置 OpenAI 库 * 2. 配置 Vercel AI SDK * 四、运行测试 一、安装 Node.js 22+ 1. 官网下载:访问 Node.js 官网,选择 v22.x 稳定版(LTS 或 Current 均可),按系统(Windows/Mac/

By Ne0inhk