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;       
    }
}

+ Recent posts