Search

Set Mismatch

문제 설명 : 제공되는 숫자 배열 중, 조건에 따라 존재하지 않는 숫자나 중복된 숫자를 리스트에 설정하여 반환
풀이 방법
존재하는 숫자를 별도의 해시 테이블에 저장하는 방식을 사용
시간복잡도 : O(N)O(N)
성공 코드
class Solution: def findErrorNums(self, nums: List[int]) -> List[int]: include_key = set() result = [] for num in nums: if num in include_key: result.append(num) include_key.add(num) exclude_key = set([i for i in range(1, len(nums) + 1)]) - include_key result.extend(list(exclude_key)) return result
Python
복사
정렬을 사용한 성공코드(O(NlogN))
다른 솔루션을 확인해보니, return하는 값은 2가지만 존재하면 되는 것이었다.
즉, 중복 숫자는 하나만 있고 미 존재 숫자도 하나만 있는 것이었다.
아래와 같이 정렬 후 순회하면서, 중복 숫자 / 미 존재 숫자를 따로 구해서 반환해도 된다.
class Solution: def findErrorNums(self, nums): nums.sort() duplicate = -1 missing = 1 # 초기값으로 1 설정 for i in range(1, len(nums)): if nums[i] == nums[i - 1]: duplicate = nums[i] elif nums[i] > nums[i - 1] + 1: missing = nums[i - 1] + 1 if nums[-1] != len(nums): missing = len(nums) return [duplicate, missing]
Python
복사