Given an integer array nums of length n where
all the integers of nums are in the range [1, n] and each integer appears once or twice,
return an array of all the integers that appears twice.
You must write an algorithm that runs in O(n) time
and uses only constant extra space.
주어진 길이 n의 정수 배열에 1~n의 숫자들이 있다.
이 숫자들이 1번 혹은 2번씩 등장할때, 2번 등장하는 숫자들의 배열을 리턴하시오.
단 O(n)의 시간복잡도와 O(1)의 공간복잡도를 가져야 한다.
Input: nums = [4,3,2,7,8,2,3,1]
Output: [2,3]
Explanation: 나머지는 1번씩 나오는데, 2와 3만 두번 등장한다.
class Solution:
def findDuplicates(self, nums: List[int]) -> List[int]:
ans = []
for i, v in enumerate(nums):
value = v if v > 0 else -v
# 값이 양수이면 음수로 flip
if nums[value-1] > 0:
nums[value-1] *= -1
# 이미 음수이면 정답 배열에 추가.
else:
ans.append(value)
return ans