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

《算法闯关指南:优选算法--前缀和》--31.连续数组,32.矩阵区域和
在这里插入图片描述

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


🎬 博主简介:

在这里插入图片描述

文章目录


前言:

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

31. 连续数组

题目链接

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

题目描述

在这里插入图片描述


题目示例

在这里插入图片描述

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

算法思路:

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

  • 本题让我们找出一段连续的区间,01出现的次数相同。
  • 如果将0记为-11记为1,问题就变成了找出一段区间,这段区间的和等于0
  • 找到在【0,i-1】区间内,第一次出现 sum[i] 的位置即可。

于是,就和之前做过的那个和为k的子数组的题思路类似了

在这里插入图片描述


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

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

C++算法代码:

classSolution{public:intfindMaxLength(vector<int>& nums){ unordered_map<int,int>hash; hash[0]=-1;//默认前缀和为0的情况有一个,但这里注意我们的后面一个int是存下标的int sum=0,ret=0;for(int i=0;i<nums.size();i++){ sum+=nums[i]==0?-1:1;//计算当前位置的前缀和//并且数组中为0的改成-1;if(hash.count(sum)) ret=max(ret,i-hash[sum]);else hash[sum]=i;}return ret;}};

算法总结&&笔记展示:

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

在这里插入图片描述

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

classSolution{public: vector<vector<int>>matrixBlockSum(vector<vector<int>>& mat,int k){int m=mat.size(),n=mat[0].size(); vector<vector<int>>dp(m+1,vector<int>(n+1)); vector<vector<int>>answer(m,vector<int>(n));//预处理出来一个dp数组for(int i=1;i<=m;i++)for(int j=1;j<=n;j++) dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]+mat[i-1][j-1];//使用dp数组for(int i=0;i<m;i++)for(int j=0;j<n;j++){int x1=max(0,i-k)+1,y1=max(0,j-k)+1;int x2=min(m-1,i+k)+1,y2=min(n-1,j+k)+1; answer[i][j]=dp[x2][y2]-dp[x1-1][y2]-dp[x2][y1-1]+dp[x1-1][y1-1];}return answer;}};

算法总结&&笔记展示:

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

在这里插入图片描述


在这里插入图片描述

结尾:

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

结语:本文聚焦算法实战,通过两道力扣题目详解前缀和与哈希表的应用。525.连续数组将0/1转换后用前缀和+哈希表寻找和为0的最长子数组;1314.矩阵区域和通过二维前缀和快速计算矩阵区域和,注意处理边界条件。代码实现清晰,附手写笔记图解关键思路,适合算法学习者提升实战能力。

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

Read more

Qt与Web混合编程:CEF与QCefView深度解析

Qt与Web混合编程:CEF与QCefView深度解析

Qt与Web混合编程:CEF与QCefView深度解析 * 1. 引言:现代GUI开发的融合趋势 * 2. Qt与Web集成方案对比 * 3. CEF核心架构解析 * 4. QCefView:Qt与CEF的桥梁 * 5. 实战案例:智能家居控制面板 * 6. 性能优化策略 * 7. 调试技巧大全 * 8. 安全加固方案 * 9. 未来展望:WebComponent集成 * 10. 结语 1. 引言:现代GUI开发的融合趋势 在当今的桌面应用开发领域,本地GUI框架与Web技术的融合已成为不可逆转的趋势。Qt作为成熟的跨平台C++框架,与Web技术的结合为开发者提供了前所未有的灵活性: * 本地性能 + Web动态性 = 最佳用户体验 * 快速迭代的Web前端 + 稳定可靠的本地后端 * 跨平台一致性 + 现代UI效果 35%25%20%20%混合应用优势分布开发效率UI表现力跨平台性性能平衡 2. Qt与Web集成方案对比 方案优点缺点适用场景Qt WebEngine官方支持,

By Ne0inhk

B站PC端web自动开启字幕脚本(2025新版适配)

B站自动字幕用户脚本:快捷键开关 + 自动开启字幕(2026新版适配) 作者:Apixus 更新日期:2026年3月5日 项目地址:GitHub仓库 一、脚本介绍 你是否经常在B站看视频时反复手动开启字幕?是否希望切换视频时字幕能自动开启? 这个用户脚本就是为了解决这些问题而开发的。 B站自动字幕脚本 提供了以下功能: * 🎯 快捷键控制:按 C 键快速开启或关闭字幕 * 🔄 自动开启:切换分P、点击推荐视频时自动打开字幕 * 🆕  2026新版适配:专为B站最新版播放器优化 * ⚡ 性能优化:智能监听,告别卡顿轮询 * 🛡️ 防冲突:自动识别输入框,避免误触 二、适用页面 * 普通视频页:https://www.bilibili.com/video/* * 播放列表页:https://www.bilibili.com/list/* 支持普通视频页、番剧页、播放列表页等常见场景。 三、

By Ne0inhk
【前端实战】构建 Vue 全局错误处理体系,实现业务与错误的清晰解耦

【前端实战】构建 Vue 全局错误处理体系,实现业务与错误的清晰解耦

目录 【前端实战】构建 Vue 全局错误处理体系,实现业务与错误的清晰解耦 一、为什么要做全局错误处理? 1、将业务逻辑与错误处理解耦 2、为监控和埋点提供统一入口 二、Vue 中的基础全局错误处理方式 1、Vue 中全局错误处理写法 2、它会捕获哪些错误? 3、它不会捕获哪些错误? 4、errorHandler 的参数含义 三、全局错误处理的进阶设计 1、定义“可识别的业务错误” 2、在 errorHandler 中做真正的“分类处理” 3、补齐 Promise reject 的捕获能力 4、错误处理的策略化封装 四、结语         作者:watermelo37         ZEEKLOG优质创作者、华为云云享专家、阿里云专家博主、腾讯云“

By Ne0inhk
【贪心算法】贪心算法

【贪心算法】贪心算法

贪心算法简介 * 1.什么是贪心算法 * 2.贪心算法的特点 * 3.学习贪心的方向 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 1.什么是贪心算法 与其说是贪心算法,不如说是贪心策略。 贪心策略:解决问题的策略( 局部最优 —> 全局最优)。 1. 把解决问题的过程分为若干步; 2. 解决每一步的时候,都选择当前看起来 “最优的” 解法; 3. “希望” 得到全局最优解。 接下来我们举三个例子重点突然我们的贪心策略。 例一:找零问题 假设顾客拿着50块钱去买一瓶4块钱的饮料,你需要找顾客46块钱。此时你只有面额20元、10元、5元、1元 若干个纸币。我们要的是用最少的张数完成找零。 我给你找46块钱肯定是一张一张给你凑成46块钱。解决问题的时候整个问题就分为若干步,若干步就是一张一张的给你找。然后解决每一步的时候都选择当前看起来 “最优的” 解法。 当开始凑46块钱的时候,刚开始肯定不会拿最小的1块钱,

By Ne0inhk