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) { |