【优先算法】双指针 --(结合例题讲解解题思路)(C++)

目录

​编辑

[1. 题目:三数之和](#1. 题目:三数之和)

1.1算法思路

1.2代码实现

2.题目:四数之和

2.1算法思路

2.2代码实现


1. 题目:三数之和

力扣-三数之和https://leetcode.cn/problems/3sum/

1.1算法思路

方法一:暴力解法

三层for循环,一个一个去找。因为有重复的,所以我们要将数据放进set,去重。

总结,这种方法,时间复杂度太高,如果用这个方法,难度根本没有,所以面试官想要的根本不是这种!!!

方法二:双指针

第一步,排好序

第二步,固定一个数 a,因为题干说,三个数和==0,那么,我只需要在固定的这个数,的后面的区间利用"双指针"找到两个数,和== -a 即可。

当然,在过程中,我们需要特别注意的是,做到不重,不漏。

第三步,不漏

就是在left,right在移动过程中,找到了符合条件的之后,还要继续在区间查找。

第四步,不重

做到去重,就是每次找到符合条件的数,left++,right--,但是如果变化之后的数还是与之前的一样numsleft==numsleft-1 或者 numsright==numsright+1 此时,我们需要继续++或--

!!!但是注意,不要越界需要有限制条件left < right。

1.2代码实现

暴力解法的代码实现,我这就不写了。双指针的解法思路也是有两种,例如下 方法一和方法二

2.题目:四数之和

力扣-四数之和https://leetcode.cn/problems/4sum/description/

2.1算法思路

四数之和算法思路和三数之和是一样的,唯一的差别就是,四数定了两个固定数(并不是完全固定的数哈!!!咱们脑子要灵活一点)

第一步,定第一个数 a=numsi

第二步,定第二个数 b=numsx

第三步,定left,right。(注意,{ a,b,numsleft,numsright }就是我们符合要求的数)

其余步骤也就和三数之和一样,做到,不重,不漏。唯一差别就是这里多了一步,b的去重。

2.2代码实现

本期学习到此结束,感谢大家支持!!!

相关推荐
码客-ygluu29 分钟前
一个通用游戏数据服务器
c++·架构
another heaven35 分钟前
【C/C++ Ranges 是零开销抽象吗?拆开管道、惰性求值和编译期膨胀】
c语言·开发语言·c++
Code_Solitude38 分钟前
C语言动态内存 + 柔性数组 + 数组名退化
c语言·算法·柔性数组
上海潭龙东海科技有限公司44 分钟前
客运站管控之动态孪生技术方案(新增一屏管控模块
数据仓库·人工智能·算法·重构·动态规划
SomeOtherTime2 小时前
Rust 闭包语法和原理(AI回答)
开发语言·后端·rust
apcipot_rain2 小时前
C++转Java日记(10)
java·开发语言
总要学点什么3 小时前
第105篇:三维特效-流动图片墙体效果——让箭头沿墙长滚,它俩竟是同一份代码
开发语言·javascript·ecmascript·gis·webgl·材质·cesium
YLCHUP3 小时前
【思维&图论建模】题解:债权(debt)_图论_建模_思路转化_思维题目_C++算法竞赛
c++·笔记·算法·数学建模·贪心算法·深度优先·图论
xiaoye-duck3 小时前
《C++ 项目:手写大模型接入 SDK》会话模块整合:内存 SessionManager 与 DataManager 持久化联动
开发语言·数据库·c++·语言模型
思麟呀4 小时前
背包DP(01背包+完全背包)
c++·算法