LeetCode 题解:18. 四数之和,双指针,JavaScript,详细注释
原题连接:https://leetcode-cn.com/problems/4sum/
解题思路:
该题是15. 三数之和的进阶版,如果你对三数之和不熟悉,可以先参考我的题解[LeetCode 题解:15. 三数之和,JavaScript 双循环+双指针,详细注释](https://leetcode-cn.com/problems/3sum/solution/javascriptpai-xu-shuang-zhi-zhen-xiang-xi-zhu-shi-/)。
使用双指针,可以在一次循环中,找到两数之和。具体做法是使用两个指针从两端向中间推进,每推进一次都计算两数之和,如果小于目标值,表示左指针太小,把左指针向右移动,知道值出现变化,再次计算两数之和。右指针也进行同样操作。
如果两数之和等于目标值,则记录结果。之后将两个指针同时想中间移动,直到出现新的值,再重复步骤 2、3。
利用两次循环,分别找到四元组集合的前两个值,再用双指针找到后两个值,即可组成相应结果。
去重的大原则是将数组排序,这样相同的值就排列在一起,只要第一个值已被使用过,就可以认为它对应的结果已被生成,这样只要通过
nums[i] === nums[i - 1]
即可排除掉相等的值。需要注意的测试用例:
复制代码
复制代码
复制代码
复制代码
版权声明: 本文为 InfoQ 作者【Lee Chen】的原创文章。
原文链接:【http://xie.infoq.cn/article/3cb85682e98efe18a63699a12】。文章转载请联系作者。
评论