Algorithm/LeetCode
LeetCode 217(Contains Duplicate, Python)
펩시_콜라
2024. 2. 5. 19:00
1. 문제 링크
Contains Duplicate - LeetCode
Can you solve this real interview question? Contains Duplicate - 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. Example 1: Input: nums = [1,2,3,1] Output: true Ex
leetcode.com
2. 문제 설명
- 오랜만에 쉬어갈 겸 easy 문제를 풀었다.
- integer로 구성된 array nums가 주어졌을 때, 특정 값이 적어도 두번 등장하면 true를, 모든 element가 distinct하면 false 반환
- 예시1) nums = [1,2,3,1]이면 output = true 반환
- 예시2) nums = [1,2,3,4]이면 output = false 반환
- 예시3) nums = [1,1,1,3,3,4,3,2,4,2]이면 output = true 반환
3. 처음 풀이
- easy문제여서 어떻게 접근해도 time limit이 걸리진 않았다.
- 가장 처음에 푼 풀이는, 단순히 distinct하게 바꾼 set의 원소개수와 nums의 개수가 같지 않은지를 반환
- 같지 않으면, True 반환, 같으면 False 반환
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
return len(nums) != len(list(set(nums)))
- 그 다음에는 sort를 시킨 후에, nums[i] == nums[i+1]이 등장하면 True를 반환하도록 코드를 짰다.
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
nums.sort()
for i in range(len(nums)-1):
if nums[i] == nums[i+1]:
return True
return False
4. 다른 풀이
- num_set이라는 빈 집합 set()를 만든 뒤, for 문을 돌리면서, 현재의 값이 이미 num_set에 존재하면 True, 아니면 False를 반환
- 이렇게 하면 메모리는 조금 들지만, sort()처리를 안하므로 좀 더 효율적
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
num_set = set()
for num in nums:
if num in num_set:
return True
num_set.add(num)
return False