https://leetcode.com/problems/4sum/description/
코드설명
투포인터(Two Pointer) 를 활용합니다.
앞선 문제인, 3sum에 l1을 맨앞에 붙인것이라고 생각하면 이해하기 편합니다.
코드
class Solution {
public List<List<Integer>> fourSum(int[] nums, int target) {
List<List<Integer>> answer = new ArrayList<>();
Arrays.sort(nums);
for(int i=0; i<nums.length - 3; i++){
if(i > 0 && nums[i] == nums[i-1]) {
System.out.print("hi? i:"+i);
// System.out.print(answer.get(0));
// System.out.print(answer.get(1));
continue;
}
for(int j=i+1; j<nums.length - 2; j++){
if(j > i + 1 && nums[j] == nums[j-1]) continue;
int l1 = i;
int l2 = j;
int l3 = j + 1;
int r1 = nums.length - 1;
while(l3 < r1){
long sum = (long) nums[l1] + nums[l2] + nums[l3] + nums[r1];
if(sum == target){
System.out.print(sum+" "+target);
answer.add(Arrays.asList(nums[l1], nums[l2], nums[l3], nums[r1]));
l3++;
while(l3 < r1 && nums[l3] == nums[l3 - 1]){
l3++;
}
}
else if(sum < target){
l3++;
}
else if(sum > target){
r1--;
}
}
}
}
return answer;
}
}