217. Contains Duplicate
1. Description
- Given an integer arrayย
nums, returnยtrueย if any value appearsย at least twiceย in the array, and returnยfalseย if every element is distinct.
2. Example
Example 1
Input:ย nums = [1,2,3,1] Output:ย true Explanation: The element 1 occurs at the indices 0 and 3.
Example 2
Input:ย nums = [1,2,3,4] Output:ย false Explanation: All elements are distinct.
3. Solution
- ์ฒซ๋ฒ์งธ ํ์ด
- Runtime: 49ms
- ์ค๋ช
- ์ด ๋ฐฉ๋ฒ์ ๋ด ์น๊ตฌ(Seong)๊ฐ ์๊ฐํ ๋ฐฉ๋ฒ์ด๋ค.
- List๋ฅผ ์ ๋ ฌ์ ํ๋ค.
- List์ ์ฒซ๋ฒ์งธ index๋ฅผ i๋ก ์นญํ๊ณ i์ i+1๋ฒ์งธ List value๋ฅผ ๋น๊ตํ๋ค.
- ์ด๋ฅผ
range(len(list)-1)๋งํผfor๋ฌธ์ ๋๋ฆฐ๋ค. - i์ i+1๋ฒ์งธ List value๊ฐ ๊ฐ๋ค๋ฉด
return True, ๋ค๋ฅด๋ฉดreturn False๋ฅผ ๋ํ๋ธ๋ค.
class Solution:
def hasDuplicate(self, nums: List[int]) -> bool:
new = sorted(nums)
#nums.sort()
i = 0
for num in range(len(new)-1):
if new[i] == new[i+1]:
return True
else:
i = i+1
return False- ๐๋ฐํ์์ ์ค์ฌ์ ์กฐ๊ธ ๋ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ์ฐพ๊ณ ์ ํ์ฌ ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋๋ฅผ ํ์ธํด ๋ณด์๋ค.
- ๋๋ฒ์งธ ํ์ด
- Runtime: 8ms
- ์ค๋ช
- ๋น Set
s๋ฅผ ์ ์ํ๋ค. for๋ฌธ์ผ๋กnums๋ฆฌ์คํธ๊ฐ ๋์๊ฐ ๋,n์ด ๋น Set์ธs์์ ์๋ค๋ฉดreturn Trues์์ ์๋ค๋ฉดs์n์ ์ถ๊ฐํ๋ค.- for๋ฌธ์ ๋ค๋๋ ธ์ ๋์๋
s์งํฉ์์ value์ ๊ฐ์ value๊ฐ ์๋ค๋ฉดreturn False
- ๋น Set
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
s = set()
for n in nums:
if n in s:
return True
else:
s.add(n)
return False๋๋ฒ์งธ ํ์ด์์ list๋์ ์ set๋ฅผ ์ด ์ด์
- List
- ๋ฆฌ์คํธ๋ ์์ฐจ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ตฌ์กฐ์ด๋ค.
- ์์๊ฐ ๋ฆฌ์คํธ์ ์๋์ง ํ์ธํ๋ ค๋ฉด, ์ฒ์๋ถํฐ ๋๊น์ง ์์ฐจ์ ์ผ๋ก ํ์ํด์ผํ๋ค.
- ์ต์
์ ๊ฒฝ์ฐ, ๋ชจ๋ ์์๋ฅผ ๋น๊ตํด์ผ ํ๋ฏ๋ก O(n) ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
- ์์๊ฐ ๋ง์์ง์๋ก ํ์ ์๊ฐ์ด ๊ธธ์ด์ง๋ ์ ํ ํ์(linear search)๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ด๋ค.
- Set
- ์งํฉ์ ํด์ ํ ์ด๋ธ(Hash Table)์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ค.
- ํด์ ํ ์ด๋ธ์ ์์๋ฅผ ๊ณ ์ ํ ํด์ ๊ฐ(Hash Value)์ผ๋ก ๋ณํํ์ฌ ์ ์ฅํ๋ค.
- ์์๊ฐ ์กด์ฌํ๋์ง ํ์ธํ ๋, ํด์ ๊ฐ์ ์ด์ฉํ์ฌ ๋ฐ๋ก ํด๋น ์์์ ์์น๋ฅผ ์ฐพ์ ์ ์์ผ๋ฏ๋ก O(1) ์๊ฐ์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
- Hash Table
- ํค-๊ฐ(key-value) ๊ตฌ์กฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- Python์
set๋ ๋ด๋ถ์ ์ผ๋ก ๋์ ๋๋ฆฌ(dict)์ ๊ฐ์ ํด์ ํ ์ด๋ธ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค. - ํด์ ํ
์ด๋ธ ์๋ฆฌ
- ์์
n์ ์ ์ฅํ ๋,hash(n)์ ๊ณ์ฐํ์ฌ ํน์ ๋ฉ๋ชจ๋ฆฌ ์์น(๋ฒํท)์ ์ฐพ์ - ํด๋น ์์น์ ์ ์ฅ
n์ด ์กด์ฌํ๋์ง ํ์ธํ ๋๋ ๊ฐ์hash(n)์ ์ด์ฉํ์ฌ ์ฆ์ ํ์ธ ๊ฐ๋ฅ
- ์์
- ๐
set๋ ๋ด๋ถ์ ์ผ๋ก ํด์ ํ ์ด๋ธ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์์๊ฐ ์กด์ฌํ๋์ง ํ์ธํ๋ ์ฐ์ฐ์ด ํ๊ท ์ ์ผ๋ก O(1) ์๊ฐ์ ์ํ๋๋ค.n๊ฐ์ ์์๋ฅผ ๊ฒ์ฌํ ๋ ์ ์ฑ ์ํ ์๊ฐ์ ์ด๋ค.
- ๐
list๋if n in s๋ถ๋ถ์ด ๋ฆฌ์คํธ์์ ํน์ ๊ฐ์ด ์กด์ฌํ๋์ง ํ์ธํ๋ ์ฐ์ฐ์ธ๋ฐ, ๋ฆฌ์คํธ์์๋ O(n) ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.- ์ด ์ฐ์ฐ์ด ๋ฆฌ์คํธ์ ๋ชจ๋ ์์์ ๋ํด ์คํ๋๋ฏ๋ก, ์ต์ ์ ๊ฒฝ์ฐ ์๊ฐ์ด ์์๋๋ค.
- ์ธ๋ฒ์งธ ํ์ด
- Runtime: 0ms
- ์ค๋ช
nums์list๊ธธ์ด์set์ ๊ธธ์ด๊ฐ ๋ค๋ฅด๋ฉดreturn True๊ฐ์ผ๋ฉดreturn False
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
return len(nums) != len(set(nums))- ๐
set์list์ ์ฑ์ง์ ์ด์ฉํด์ ์ด๋ฐ ์์ผ๋ก ํ์ดํ๋ ๋ฐฉ๋ฒ์ด ์๋ค๋ ๊ฒ์ ์๋ฉด ์ข์ ๊ฑฐ ๊ฐ๋ค.
4. What I Learned
References