Leetcode——四数之和问题

题目:

给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。

注意:
答案中不可以包含重复的四元组。

示例:

给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。

满足要求的四元组集合为: [ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2] ]

思路:

  1. 总体思路与之前写的博客"三数之和"相差不大,还是排序+双指针问题。在对nums数组排序后,不妨设置左节点a,设置左指针初始值b=a+1,右节点d,右指针初始值c=d-1。
  2. 当nums数组的长度小于4时,直接返回空列表。
  3. 对左节点a与右节点d进行双嵌套循环,目的是在左右指针做移动时,保持左右节点的相对不变性
  4. 当a+b+c+d-target=0时,添加进列表;当a+b+c+d-target<0时,b++;当a+b+c+d-target>0时,c- -。
  5. 同时,要考虑重复值的问题,针对左节点a与右节点d,在循环开始时即做出判断,当左右节点移动后与前一节点相同时,则保持继续移动:a++,d- -。
  6. 针对左右指针c,d,在每一次进行移动操作后,再次进行判断是否与前一值相同,是则继续移动。

代码如下:
在这里插入图片描述

测试结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41570890/article/details/109258951