双指针算法学习记录
📅 2026/7/13 15:14:38
👁️ 次浏览
双指针算法学习记录1 剑指 offer 57. 和为 s 的两个数字1.1 解法一暴力解法1.2 解法二双指针算法2 LeetCode 15. 三数之和2.1 解法一排序 暴力枚举 利用 set 去重2.2 解法二排序 双指针3. LeetCode 18. 四数之和3.1 解法一排序 枚举 set 去重3.2 解法二排序 双指针1 剑指 offer 57. 和为 s 的两个数字由于 leetcode 和 剑指 offer 合作终止所以目前无法在网上找到可以在线 OJ 的题目1.1 解法一暴力解法解法核心利用双循环进行枚举列举出所有可能性从而去和 s 进行匹配时间复杂度为O(n^2)且这种解题方法时间超限故不详细展开1.2 解法二双指针算法解法核心将数组首部元素作为头指针left末位元素作为尾指针right因为数组为升序当leftright与 s 进行比较就有三种结果大于 s 则说明尾指针应该向左移动使指向的元素变小去寻找相加等于 s 的元素小于 s 则说明头指针应该向有移动使指向的元素变大等于 s 直接返回下标即可始终不要忘记数组是升序的这是一个关键条件2 LeetCode 15. 三数之和2.1 解法一排序 暴力枚举 利用 set 去重解法核心使用三循环进行暴力枚举时间复杂度为O ( n 3 ) O(n^3)O(n3)将数组排序从而可以使原先例如 [0, -1, 1]、[-1, 0, 1]这种重复只是参数位置不同的数组变为一样的数组最后利用 set 的性质进行去重暴力解法不细讲2.2 解法二排序 双指针对于有序的数组如果可以使用双指针尽量不要使用二分查找双指针可以使时间复杂度降维解法核心排序的用处同解法一一样首先固定一个指针指向头部数组的首元素接下来就要寻找两个数相加为指针指向元素的相反数那这个问题就可以简化为上面讲过的和为 s 的两个数字所以我们可以把指针往右的区域再看为一个数组然后在这个数组中进行双指针查找从而找到符合的元素。需要注意的细节问题虽然上述的解法核心很简单但是有几个很恶心的细节问题如何去重如何才能不漏去所有的可能不漏问题比较好解决我们先来解决这个如果想要不漏去所有的可能性那么我们在使用双指针找到一种和为元素相反数的可能后就不能停止查找而是缩小区间继续查找解决去重去重相比不漏去可能就比较恶心思考一下如果此时双指针在已经查找和为元素相反数的一种可能是如果left指针向右移动的下一个元素还等于left元素本身那查找还有意义么注定会查找到相同的值所以是没有意义的所以要跳过相同的值双指针区间如此那么对于我们第一个指针固定的元素不也是如此么它如果值重复那么双指针区域始终也在查找和上一轮相反数一样的可能所以一定会导致结果重复所以外部也要跳过相同的值到此为止这道题才算是解答完毕本人作答代码classSolution{public:voidLeft(intleft,intright,vectorintnums){while(nums[left1]nums[left]left1right)left;left;}voidRight(intright,intleft,vectorintnums){while(nums[right-1]nums[right]right-1left)right--;right--;}vectorvectorintthreeSum(vectorintnums){sort(nums.begin(),nums.end());vectorvectorintret;inti0;while(inums.size()-2){intlefti1;intrightnums.size()-1;while(leftright){if(nums[i]nums[left]nums[right]0){ret.push_back({nums[left],nums[right],nums[i]});Left(left,right,nums);Right(right,left,nums);}if(nums[i]nums[left]nums[right]0){Left(left,right,nums);}if(nums[i]nums[left]nums[right]0){Right(right,left,nums);}}while(nums[i1]nums[i]i1nums.size()-2)i;i;}returnret;}};谈谈实现时的踩坑内存超限问题我在一次实现的时候没思考清楚对于重复元素的处理是否还需要额外进行一次自增或者自减导致在重复的位置上进行插入没有思考清楚导致左右边界一起移动在实现中我忽略了左右指针的值的和还需再进行一次比较才能确定移动左边界还是右边界只有当与期望值相等时才能左右边界一起缩限故踩坑3. LeetCode 18. 四数之和3.1 解法一排序 枚举 set 去重就是暴力枚举解法绝对超时不细讲了3.2 解法二排序 双指针在作者看来这道题就是三数之和的promax版本做法和三数之和相差无几我们只要将一个指针固定这道题便坍缩到了求三数之和的维度所以不再做详细讲解恶心的点也和三数之和一样注意去重注意边界本人作答代码classSolution{public:vectorvectorintfourSum(vectorintnums,inttarget){sort(nums.begin(),nums.end());inta0;vectorvectorintret;if(nums.size()4)returnret;while(anums.size()-3){inttarget_atarget-nums[a];intba1;while(bnums.size()-2){longlongtarget_b(longlong)target_a-(longlong)nums[b];intleftb1;intrightnums.size()-1;while(leftright){intsumnums[left]nums[right];if(sumtarget_b)left;if(sumtarget_b)right--;if(sumtarget_b){ret.push_back({nums[left],nums[right],nums[b],nums[a]});left;right--;}while(left-1!bnums[left]nums[left-1]leftright)left;while(right1nums.size()-1nums[right]nums[right1]rightleft)right--;}b;while(b-1!anums[b]nums[b-1]bnums.size()-2)b;}a;while(nums[a]nums[a-1]anums.size()-3)a;}returnret;}};事实证明作者还是太年轻了把题想简单了踩了不少坑在双指针内部leftright等于期望值时没有对left和right指针进行调整接下来踩的坑恶心程度以至于作者觉得用一大段篇幅来讲解首先是对于边界检查更加严格2020 年时这道题的测试用例为 292 个2026 年为 294 个多出来的两个测试用例正好对应了两个边界检查。1. 对于 left 和 right 增加的边界检查新增的 测试用例特地检查了left与b相等的情况如果在nums[left]和nums[b]相等的情况下会陷入判断为重复情况跳过重复的元素这样nums[left]就会少一次判断就会少一个正确结果所以在这里我们要添加和b比较是否相等while (left - 1 ! b nums[left] nums[left - 1] left right)right的情况是一样的我们要与nums.size()进行比较。2. 解决大数问题这是其中的一个测试用例如果使用int就会报错所以要在这一行存储数据时换为long longlong long target_b (long long)target_a - (long long)nums[b];
ModularizationExample:Android模块化架构的终极指南 - 从零开始构建分层应用 【免费下载链接】ModularizationExample Easy to understand real-life example of a modularized Android app 项目地址: https://gitcode.com/gh_mirrors/mo/ModularizationExample …
📅 2026/7/13 15:14:38
技术深度解析:Wand-Enhancer项目如何通过本地化配置增强实现WeMod用户体验优化 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer
Wand-En…
📅 2026/7/13 15:14:37
内容:很多人觉得一个人做公司就是打杂,累死累活还赚不到钱。其实那是你没找对路子。最近有个朋友跟我吐槽,说养了十号员工,月底一看工资单,利润全没了。他以前在大厂做运营,辞职出来单干,想着招几个人能分担压力。结果呢?招聘、培训、扯皮,光处理人际关系就耗光了精力。…
📅 2026/7/13 15:14:28
量化感知训练(QAT)与OptiQ混合精度技术的完美结合:如何在Apple Silicon上实现高效大模型部署 【免费下载链接】gemma-4-e2b-it-qat-OptiQ-4bit 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/gemma-4-e2b-it-qat-OptiQ-4bit…
📅 2026/7/13 16:00:04
揭秘dts-gen工作原理:TypeScript定义文件自动生成核心技术解析 【免费下载链接】dts-gen dts-gen creates starter TypeScript definition files for any module or library. 项目地址: https://gitcode.com/gh_mirrors/dt/dts-gen
TypeScript定义文件自动生…
📅 2026/7/13 16:00:04
革命性AI推理加速:NVIDIA Kimi-K2.6-Eagle3模型完全指南 【免费下载链接】Kimi-K2.6-Eagle3 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/Kimi-K2.6-Eagle3
NVIDIA Kimi-K2.6-Eagle3模型是一款基于优化Transformer架构的自回归语言模型,…
📅 2026/7/13 16:00:04
论文首次系统性地揭示了图检索增强生成(GraphRAG)系统在逻辑层面的根本性安全漏洞,并提出了一种名为 LOGICPOISON 的新型攻击框架。该框架与传统攻击不同,不注入显性错误信息,而是通过隐蔽地重写语料库中实体间的逻辑连…
📅 2026/7/13 16:00:04
dts-gen与DefinitelyTyped生态:如何贡献高质量类型定义的终极指南 【免费下载链接】dts-gen dts-gen creates starter TypeScript definition files for any module or library. 项目地址: https://gitcode.com/gh_mirrors/dt/dts-gen
TypeScript作为JavaScr…
📅 2026/7/13 16:00:04
前沿技术介绍:AI智能体视觉(TVA,Transformer-based Vision Agent)是依托Transformer架构与“因式智能体”理论所构建的颠覆性工业视觉技术,属于“物理AI” 领域的一种全新技术形态,完成了从“虚拟世界”到“…
📅 2026/7/13 15:59:04
做技术的人都知道,环境配置是最让人头秃的环节。特别是当你面对一个相对小众或者刚起步的项目时,文档可能不全,社区可能冷清。这时候,找到靠谱的来源就显得尤为重要。今天咱们不聊虚的,就聊聊怎么稳妥地完成 openclaw安装官方 流程,顺便分享几个我踩过的坑,希望能帮你省…
📅 2026/7/13 0:01:22
1. 项目概述:当火焰特效成为帧率杀手在UE5项目里,尤其是那些追求电影级视觉的开放世界或者大场景战斗游戏,一个熊熊燃烧的篝火、一次震撼的爆炸,往往是点燃玩家情绪的关键。Niagara作为虚幻引擎5中取代了老旧的Cascade的下一代粒子…
📅 2026/7/13 0:01:52
1. 项目概述与核心价值 最近在对接抖音小游戏平台时,侧边栏复访功能成了一个绕不开的“必答题”。很多开发者朋友,包括我自己一开始,都对这个功能有点摸不着头脑:它到底是什么?为什么平台这么重视?不接入行…
📅 2026/7/13 0:01:52
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/13 5:30:27
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/13 6:21:22
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/13 7:10:30
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/13 3:29:47
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/12 15:39:57
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/13 9:07:16