LeetCode 18 四数之和
给你一个由n个整数组成的数组nums,和一个目标值 target。 |
解题思路
这一题就是之前三数之和的进阶版本,解题的大体思路都是差不多的,只需要先将数组排序,然后固定住两个数,剩余两个数设置为left和right,根据结果的大小来决定是移动左边还是右边。
按照以下的步骤来判断:
- 如果数组长度小于4,那么无法组成四数之和,那么直接返回空数组
- 将数组进行从小到大的排序
- 固定第一个数
i,如果i和i-1一样的话,就跳过重复的数 - 如果
i,i+1,i+2,i+3之和大于目标值的话,那么就结束,因为最小值已经大于目标值了 - 如果
i,length-3,length-2,lenght-1之和小于目标值的话,那么就结束,因为最大值已经小于目标值了 - 目标值处于最大最小值之间,那么再固定一个数
j,重复3-4步骤 - 此时目标值仍旧处于最大最小值之间,那么设置
left为j+1,设置right为length-1, - 根据和与目标值的大小关系进行调整,如果大于那么
right--,如果小于那么left++ - 循环直至结束
代码
var fourSum = function(nums, target) { |