18. 4Sum
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target ? Find all unique quadruplets in the array which gives the sum of target.
Note : The solution set must not contain duplicate quadruplets.
For example, given array S = [1, 0, -1, 0, -2, 2], and target = 0.
A solution set is :
[
[-1, 0, 0, 1],
[-2, -1, 1, 2],
[-2, 0, 0, 2]
]
思路
- 对数组排序
- 确定四元数中的前两个(a,b)
- 遍历剩余数组确定两外两个(c,d),确定cd时思路跟3Sum确定后两个数据一样,二分查找左右逼近。
- 在去重时采用set集合
问题
第一次提交自己写的如下代码也会超时,主要原因是在每层循环的时候都调用nums.size()会造成很多的时间浪费,因为其是一个不变的值,所以应该初始化的时候直接把他付给一个整形变量,后面就不会再重复调用nums.size()了,降低时间复杂度
1 | class Solution { |
Java Code:
1 | class Solution { |