三数之和和四数之和

三数之和:

对数组进行排序

设置三个指针:i,left和right,表示数据a,b,c的下标

i的取值范围0到数组长度-1

对a进行剪枝操作,如果nums[i]>0,表示不存在符合条件的三元组,直接break

对a进行去重处理,如果i大于0并且nums[i]==nums[i-1],跳过当次循环

设置b的位置left = i+1,设置c的位置right = nums.length -1

当left<right时:

判断当前三个数的和是否等于0,如果大于0,则将right左移,如果小于0则将left右移,如果等于0,则表示找到当前一个符合条件的结果,进行保存。保存后对b和c进行去重处理,去重时不断移动right或left,移动的条件为nums[right-1]==nums[right]&&left<right以及nums[left+1]==nums[left]&&left<right。找到一个符合条件的结果后左移right以及右移left

返回最终结果res

代码随想录链接:代码随想录

四数之和:

在三数之和的基础上引入另外一个指针j,j的取值范围是i+1到nums.length-1,表示数据b的位置

进行两次剪枝处理和去重处理

left和right的操作同三数之和

代码随想录:代码随想录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值