•
문제 링크 : leetcode.com
•
문제 설명 : 제공되는 숫자 배열 중, 조건에 따라 존재하지 않는 숫자나 중복된 숫자를 리스트에 설정하여 반환
•
풀이 방법
◦
존재하는 숫자를 별도의 해시 테이블에 저장하는 방식을 사용
•
시간복잡도 :
•
성공 코드
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
복사