Leetcode Threesum

Published: by Creative Commons Licence

LeetCode - ThreeSum

  • 쓰리포인터를 이용하여 문제 해결.
  • 쓰리포인터 처음 써봐서 신기했다.
  • 중복된 숫자 처리를 while문을 이용하여 그냥 넘어가게 한다면 시간을 더 줄일 수 있을 거 같다.
class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int> > res;
        set<pair<int,pair<int,int>>> s;
        sort(nums.begin(), nums.end());
        for(int i=0;i<nums.size();i++){
            int left = i+1, right= nums.size()-1;
            while(left<right){
                int sum = nums[i]+nums[left]+nums[right];
                if(sum==0) {
                    //printf("%d %d %d\n",nums[i], nums[left], nums[right]);
                    if(s.find({nums[i],{nums[left],nums[right]}})==s.end()){
                        vector<int> tmp={nums[i], nums[left],nums[right]};
                        s.insert({ nums[i],{nums[left],nums[right]} });

                        res.push_back(tmp);
                    }
                    left++, right--;
                }
                else{
                    if(sum>0) right--;
                    else left++;
                }
                
            }
        }
        return res;
    }
};