Algorithm/CPP

[C++, LeetCode] Contains Duplicate 벡터에 중복 값 포함되었는지 확인하기

박한결 2021. 6. 15. 15:40

문제: https://leetcode.com/problems/contains-duplicate/

 

Contains Duplicate - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

앞에서 풀었던 문제(정렬된 벡터에서 중복 제거하기)와 유사해서 금방 풀었다.

 

🔽풀이 1

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        int before = nums.size();
        sort(nums.begin(), nums.end());
        nums.erase(unique(nums.begin(), nums.end()), nums.end());
        return (before != nums.size());
    }
};

 

그런데 이 문제는 중복을 굳이 제거할 필요 없는데 제거 했으니 느릴 것 같았는데

 

'Your runtime beats 97.17 % of cpp submissions.' 

 

97.17% 로 빠른 편이었다. 

 

다른 사람들의 코드를 보면서 c++에도 set이 있다는 걸 알게됐다.

 

🔽풀이 2

#include <set>
using namespace std;

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        return nums.size() > set<int>(nums.begin(), nums.end()).size();        
    }
};

 

 

그런데 set 처럼 중복을 제거하는 방법(첫번째)은 16ms가 걸리고 set을 사용하면 60ms가 걸린다. 왜일까.. 나중에 찾아봐야 겠다.