(Leetcode) [Array]: Contains duplicate
Topic: Array
Difficulty: Easy
Array element ์ค์ ํ๋๋ผ๋ ์ค๋ณต๋๋ ๊ฒ ์์ผ๋ฉด return true; else return false.
Solution
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
vector<int> temp;
for (int i=0; i<nums.size(); i++) {
if (find(temp.begin(), temp.end(), nums[i]) != temp.end())
return true;
temp.push_back(nums[i]);
}
return false;
}
};
์ฒซ ๋ฒ์งธ๋ก ํ์๋ ๋ฌธ์ (two sum)์ ์ธ์ฉํด์ ํ์๋ค.
for loop์ ์ด์ฉํด์ temp๋ผ๋ ์์์ ๋ฒกํฐ์ ์ซ์๋ฅผ ํ๋์ฉ ๋ฃ๋๋ฐ, ๋ฃ๊ธฐ ์ ์ temp ์์ ๋ฃ์ผ๋ ค๋ ์ซ์์ ๊ฐ์ ์ซ์๊ฐ ์์ผ๋ฉด return true.
์์ผ๋ฉด temp์ ์ ์ฅํ๊ณ loop ๊ณ์ ๋ฐ๋ณต.
๊ฒฐ๊ณผ:
runtime์ ์์ 95ํผ์ด๋ค (2941 ms); ๋ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ด ์๋๋ณด๋ค.
memory๋ ์์ 30ํผ (47.4 MB). ๋๋ฆ ์ ๋ฐฉํ๋ฏ?
์ฌ๋ฌ๊ฐ์ง์ ๋ต์์ด ์์๋ค. ๊ทธ ์ค ์ธ ๊ฐ๋ฅผ ์๊ฐํ๋ค.
1. Use of set (unordered_set)
๊ณ ์ ํ ์์๋ง ์ ์งํ๋ ๋ฐฐ์ด์์ ์งํฉ์ ๊ตฌ์ฑํ๋ค. ๊ทธ๋ฐ ๋ค์ ์งํฉ์ ํฌ๊ธฐ๋ฅผ ๋ฐฐ์ด์ ๊ธธ์ด์ ๋น๊ตํ๋ค.
๋์ ํฌ๊ธฐ๊ฐ ๊ฐ์ผ๋ฉด ์ค๋ณต ์์, ๋ค๋ฅด๋ฉด ์ค๋ณต ์์.
bool containsDuplicate(vector<int>& nums) {
unordered_set<int> temp(nums.begin(), nums.end());
if (temp.size() == nums.size())
return false;
else
return true;
}
๊ฒฐ๊ณผ: runtime์ 10๋ฐฐ ์ด์ ๋นจ๋ผ์ง (211 ms = ์์ 89ํผ). ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ฆ๊ฐ (55.3MB = ์์ 94ํผ)
2. Use of sort
๋ฐฐ์ด์ ์ ๋ ฌํ๊ณ ์ฐ์ ์์์ ๊ฐ ์์ ๋น๊ตํ์ฌ ์ค๋ณต์ ํ์ธํ๋ค.
Time complexity: O(nlog(n)).
bool containsDuplicate(vector<int>& nums) {
sort(nums.begin(), nums.end());
for (int i=0; i<nums.size()-1; i++) {
if (nums[i]==nums[i+1])
return true;
}
return false;
}
๊ฒฐ๊ณผ: runtime 149 ms (์์ 53ํผ), ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ 46.6 MB (์์ 20ํผ).
3. Use of adjacent_find
std::adjacent_find
: ์ ๋ ฌ๋ ๋ฐฐ์ด์์ ๋์ผํ ์ธ์ ์์์ ์ฒซ ๋ฒ์งธ ๋ฐ์์ ์ฐพ๋๋ค.
์ค๋ณต์ด ์์ผ๋ฉด ์ฒซ ๋ฒ์งธ ์ค๋ณต ์์์ ๋ฐ๋ณต์๋ฅผ ๋ฐํํ๋ค. ์์ผ๋ฉด ๋ฒ์ ๋์ ๋ฐํํ๋ค.
bool containsDuplicate(vector<int>& nums) {
sort(nums.begin(), nums.end());
if (adjacent_find(nums.begin(), nums.end()) != nums.end())
return true;
else
return false;
}
๊ฒฐ๊ณผ: runtime 114 ms (์์ 20ํผ), ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ 46.7 MB (์์ 20ํผ).
Leave a comment