본문 바로가기
LeetCode

[LeetCode] 18. 4Sum

by 콩순이냉장고 2023. 9. 5.

문제 URL : https://leetcode.com/problems/4sum/

 

4Sum - LeetCode

Can you solve this real interview question? 4Sum - Given an array nums of n integers, return an array of all the unique quadruplets [nums[a], nums[b], nums[c], nums[d]] such that: * 0 <= a, b, c, d < n * a, b, c, and d are distinct. * nums[a] + nums[b] +

leetcode.com

 

문제 접근법 : 

 

배열 4개의 원소를 선택해서 합이 target이 되는것을 찾는 문제인데

 

4중for문을 이용하면 당연히 구해지겠지만

n^4 은 nums의 길이가 200까지라 8억이라 tle입니다.

정렬후 투포인터를 이용해 n^3을 만들수있습니다. 

 

소스코드 : 

 

class Solution {
public:
vector<vector<int>> fourSum(vector<int> &nums, int target)
{
    sort(nums.begin(), nums.end());
    set<vector<int>> s;
    int size = nums.size();
    for (int i = 0; i < size - 3; i++){
        for (int j =size-1; j >= i+3; j--){
            int l = i + 1;
            int r = j-1;
            long long sum = nums[i] + nums[j];
            while (l < r)
            {
                long long sum2 = sum + nums[l] + nums[r];
                if (sum2 <= target)
                {
                    if (sum2 == target)
                    {
                        s.insert({nums[i],nums[l],nums[r],nums[j]});
                    }
                    l++;
                }
                else
                {
                    r--;
                }
            }
        }
    }
    return vector<vector<int>> (s.begin(),s.end());
}
};

 

되게많이 틀렸습니다. 그이유는 투포인터를 이용안하고 풀어보고싶어서

시간복잡도 n^2으로 만들어봤지만 200개정도의 테스트케이스는 통과하는데 반례가 나오더군요

n^2(log(n)) 으로 할수없나 이분탐색 해봤는데도 잘 안되더군요

 

시간복잡도를 줄일수있는 해설이 있는 블로그가 있다면 알려주시면 감사하겠습니다.

'LeetCode' 카테고리의 다른 글

[LeetCode] 223. Rectangle Area  (2) 2023.09.06
[LeetCode] 30. Substring with Concatenation of All Words  (0) 2023.09.05
[LeetCode] 40. Combination Sum II  (1) 2023.08.31
[LeetCode] 37. Sudoku Solver  (0) 2023.08.31
[LeetCode] 146. LRU Cache  (0) 2023.08.31