부부의 코딩 성장 일기

LeetCode 217(Contains Duplicate, Python) 본문

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