《算法闯关指南:优选算法-双指针》--07三数之和,08四数之和

《算法闯关指南:优选算法-双指针》--07三数之和,08四数之和

🔥草莓熊Lotso:个人主页

❄️个人专栏:《C++知识分享》《Linux 入门到实践:零基础也能懂》

生活是默默的坚持,毅力是永久的享受。


🎬博主简介:


目录

前言:

07.三数之和

解法:(排序+双指针)

算法思路:

C++代码演示:

算法总结&&笔记展示:

08.四数之和

解法:(排序+双指针)

算法思路:

C++代码演示:

算法总结&&笔记展示:


前言:

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

07.三数之和

题目链接:

15. 三数之和 - 力扣(LeetCode)

题目描述:

题目示例:

解法:(排序+双指针)

--暴力算法就不讲了,(排序+暴力+set去重)。时间复杂度过高,肯定过不了。

算法思路:

 本题与两数之和为s类似,是非常经典的面试题。

与两数之和稍微不同的是,题目中要求找到所有【不重复】的三元组。那我们可以利用在两数之和为s那里的双指针思想,来对我们暴力枚举进行优化:

  • 先排序
  • 然后固定一个数a;
  • 在这个数后面的区间内,使用【双指针算法】快速找到两个数之和等于 -a 即可。

但是我们需要注意的是,这道题里面需要有【去重】操作!

找到一个结果之后,不要停,left++,right-- 缩小区间后, left right 指针也要【跳过重复】的元素;

当使用完一次双指针算法之后,固定的 a 也要 【跳过重复】的元素。

C++代码演示:

class Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> ret; //排序 sort(nums.begin(),nums.end()); int n=nums.size(); for(int i=0;i<n;)//固定数a(nums[i]),这里i先不++,后面会处理 { int left=i+1,right=n-1,target=-nums[i]; if(nums[i]>0) break; while(left<right) { int sum=nums[left]+nums[right]; if(sum<target) left++; else if(sum>target) right--; else { ret.push_back({nums[i],nums[left],nums[right]}); left++,right--; //去重一 while(left<right&&nums[left]==nums[left-1]) left++; while(left<right&&nums[right]==nums[right+1]) right--; } } //去重二 i++;//这里i++; while(i<n&&nums[i]==nums[i-1]) i++; } return ret; } };

算法总结&&笔记展示:

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


08.四数之和

题目链接:

18. 四数之和 - 力扣(LeetCode)

题目描述:

题目示例:

解法:(排序+双指针)

--暴力解法这里还是不提了,肯定超时。

算法思路:

  • 依次固定一个数 a;
  • 在这个数 a 的后面区间上利用【三数之和】找到三个数,使这三个数的和等于 target-a 即可

C++代码演示:

class Solution { public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>> ret; //排序 sort(nums.begin(),nums.end()); int n=nums.size(); for(int i=0;i<n;)//固定数a { for(int j=i+1;j<n;)//固定数b { int left=j+1,right=n-1;long long targetsub=(long long)target-nums[i]-nums[j]; //这里注意数据大小 while(left<right) { long long sum=nums[left]+nums[right]; if(sum<targetsub) left++; else if(sum>targetsub) right--; else{ ret.push_back({nums[i],nums[j],nums[left],nums[right]}); left++; right--; //去重一 while(left<right&&nums[left]==nums[left-1]) left++; while(left<right&&nums[right]==nums[right+1]) right--; } } //去重二 j++; while(j<n&&nums[j]==nums[j-1]) j++; } //去重三 i++; while(i<n&&nums[i]==nums[i-1]) i++; } return ret; } };

算法总结&&笔记展示:

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


往期回顾:

《算法闯关指南:优选算法-双指针》--01移动零,02复写零

《算法闯关指南:优选算法-双指针》--03快乐数,04盛水最多的容器

《算法闯关指南:优选算法-双指针》--05有效三角形的个数,06查找总价值为目标值的两个商品

结语:本篇博客介绍了LeetCode中三数之和与四数之和问题的解题思路。通过排序+双指针算法优化暴力解法,重点讲解了去重操作的实现方法。对于三数之和,固定一个数后用双指针在剩余区间寻找两数之和;四数之和则通过固定两个数后转化为三数之和问题。如果文章对你有帮助的话,欢迎评论,点赞,收藏加关注,感谢大家的支持。

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


Read more

DeepSeek各版本说明与优缺点分析_deepseek各版本区别

DeepSeek各版本说明与优缺点分析 DeepSeek是最近人工智能领域备受瞩目的一个语言模型系列,其在不同版本的发布过程中,逐步加强了对多种任务的处理能力。本文将详细介绍DeepSeek的各版本,从版本的发布时间、特点、优势以及不足之处,为广大AI技术爱好者和开发者提供一份参考指南。 1. DeepSeek-V1:起步与编码强劲 DeepSeek-V1是DeepSeek的起步版本,这里不过多赘述,主要分析它的优缺点。 发布时间: 2024年1月 特点: DeepSeek-V1是DeepSeek系列的首个版本,预训练于2TB的标记数据,主打自然语言处理和编码任务。它支持多种编程语言,具有强大的编码能力,适合程序开发人员和技术研究人员使用。 优势: * 强大编码能力:支持多种编程语言,能够理解和生成代码,适合开发者进行自动化代码生成与调试。 * 高上下文窗口:支持高达128K标记的上下文窗口,能够处理较为复杂的文本理解和生成任务。 缺点: * 多模态能力有限:该版本主要集中在文本处理上,缺少对图像、语音等多模态任务的支持。 * 推理能力较弱:尽管在自然语言

By Ne0inhk

用DeepSeek和Cursor从零打造智能代码审查工具:我的AI编程实践

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【星海网址导航】摸鱼、技术交流群👉 点此查看详情 引言:AI编程革命下的机遇与挑战 GitHub统计显示,使用AI编程工具的开发者平均效率提升55%,但仅有23%的开发者能充分发挥这些工具的潜力。作为一名全栈工程师,我曾对AI编程持怀疑态度,直到一次紧急项目让我彻底改变了看法。客户要求在72小时内交付一个能自动检测代码漏洞、优化性能的智能审查系统,传统开发方式根本不可能完成。正是这次挑战,让我探索出DeepSeek和Cursor这对"黄金组合"的惊人潜力。 一、工具选型:深入比较主流AI编程工具 1.1 为什么最终选择DeepSeek+Cursor? 经过两周的对比测试,我们发现不同工具在代码审查场景的表现差异显著: 工具代码理解深度响应速度定制灵活性多语言支持GitHub Copilot★★★☆★★★★★★☆★★★★Amazon CodeWhisperer★★☆★★★☆★★★★★★☆DeepSeek★★★★☆★★★★★★★☆★★★★☆Cursor★★★☆★★★★☆★★★★★★★★ 关键发现: * Dee

By Ne0inhk
【DeepSeek应用】100个 DeepSeek 官方推荐的工具箱

【DeepSeek应用】100个 DeepSeek 官方推荐的工具箱

【DeepSeek应用】Deepseek R1 本地部署(Ollama+Docker+OpenWebUI) 【DeepSeek应用】DeepSeek 搭建个人知识库(Ollama+CherryStudio) 【DeepSeek应用】100个 DeepSeek 官方推荐的工具箱 【DeepSeek应用】Zotero+Deepseek 阅读与分析文献 【DeepSeek应用】100个 DeepSeek 官方推荐的工具箱 * 1. DeepSeek 工具箱:应用程序 * 2. DeepSeek 工具箱:AI Agent 框架 * 3. DeepSeek 工具箱:RAG 框架 * 4. DeepSeek 工具箱:即时通讯软件 * 5. DeepSeek 工具箱:浏览器插件 * 6. DeepSeek 工具箱:

By Ne0inhk
假网站排全网第二,真官网翻五页都找不到!NanoClaw创始人破防:SEO之战,我快要输了

假网站排全网第二,真官网翻五页都找不到!NanoClaw创始人破防:SEO之战,我快要输了

整理 | 苏宓 出品 | ZEEKLOG(ID:ZEEKLOGnews) 自从 OpenClaw 爆火之后,各种“Claw”项目接连出现,其中以安全优化版 NanoClaw 最为知名。它的核心代码仅有 4000 行,却获得了 AI 大牛 Andrej Karpathy 的点赞。 可谁也没想到,这款口碑极佳的开源项目,近来竟被一个仿冒网站抢了风头。 投诉无门之下,NanoClaw 创始人 Gavriel Cohen 在 X 社交平台上无奈发文怒斥:谷歌搜索错误地将假网站排在真官网前面,不仅破坏了项目声誉,还埋下了严重的安全隐患,而他费尽心力,却只能哀叹一句——“我正在为自己的开源项目打 SEO 战,但我快要输了。” 那么,NanoClaw 究竟发生了什么?又是怎么走红的?事情还要从 OpenClaw

By Ne0inhk