三数之和:
对数组进行排序
设置三个指针: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的操作同三数之和
代码随想录:代码随想录