【算法07天:Day7】第三章哈希表 LeetCode 四数之和(18)

42 阅读1分钟

题目四:

image.png

解题思路: 这个题和三数之和类似,逻辑基本一致,差别就在于去重时有点不一样。这个题由于是四个数之和,因此可以固定两个不变量,然后改变left和right

1、首先对数组进行排序,排序后固定两个数 nums[i],nums[j],再使用左右指针指向 nums[j]后面的两端,数字分别为 
   nums[L] 和 nums[R],计算四个数的和 sum 判断是否满足为 target,满足则添加进结果集
2、如果 nums[i] == nums[i - 1],则说明该数字重复,会导致结果重复,结束循环
3、如果 nums[j] == nums[j-1],同时,还需要当 j > i + 1,因为如果不设置这个值的话,例如[8, 8, 8, 8, 8], 第一次
   就无法统计进去。因此该数字重复,会导致结果重复,所以应该跳过
4、当 sum == target 时,nums[L] == nums[L+1] 则会导致结果重复,应该跳过,L++
5、当 sum == target 时,nums[R] == nums[R-1] 则会导致结果重复,应该跳过,R--

image.png

总结:这个题过后,五数之和、六数之和就会解决了。双指针方法真强大!!!