class Solution:
def findErrorNums(self, nums: List[int]) -> List[int]:
res = [0, 0]
n = len(nums)
for i in range(1, n + 1):
cnt = 0
for num in nums:
if num == i:
cnt += 1
if cnt == 0:
res[1] = i
elif cnt == 2:
res[0] = i
return resclass Solution:
def findErrorNums(self, nums: List[int]) -> List[int]:
res = [0, 1]
nums.sort()
for i in range(1, len(nums)):
if nums[i] == nums[i - 1]:
res[0] = nums[i]
elif nums[i] - nums[i - 1] == 2:
res[1] = nums[i] - 1
if nums[-1] != len(nums):
res[1] = len(nums)
return resclass Solution:
def findErrorNums(self, nums: List[int]) -> List[int]:
res = [0, 0] # [duplicate, missing]
count = Counter(nums)
for i in range(1, len(nums) + 1):
if count[i] == 0:
res[1] = i
if count[i] == 2:
res[0] = i
return resclass Solution:
def findErrorNums(self, nums: List[int]) -> List[int]:
res = [0, 0]
for num in nums:
num = abs(num)
nums[num - 1] *= -1
if nums[num - 1] > 0:
res[0] = num
for i, num in enumerate(nums):
if num > 0 and i + 1 != res[0]:
res[1] = i + 1
return resclass Solution:
def findErrorNums(self, nums: List[int]) -> List[int]:
N = len(nums)
x = 0 # duplicate - missing
y = 0 # duplicate^2 - missing^2
for i in range(1, N + 1):
x += nums[i - 1] - i
y += nums[i - 1]**2 - i**2
missing = (y - x**2) // (2 * x)
duplicate = missing + x
return [duplicate, missing]class Solution:
def findErrorNums(self, nums: List[int]) -> List[int]:
N = len(nums)
# a ^ a = 0
# xorr = (1 ^ 2 ^ ... N) ^ (nums[0] ^ nums[1] ^ ... nums[N - 1])
# xorr = missing ^ duplicate
xorr = 0
for i in range(1, N + 1):
xorr ^= i
xorr ^= nums[i - 1]
# bit that is set in only one number among (duplicate, missing),
# will be set in (duplicate ^ missing)
# take rightMost set bit for simplicity
rightMostBit = xorr & ~(xorr - 1)
# divide numbers (from nums, from [1, N]) into two sets w.r.t the rightMostBit
# xorr the numbers of these sets independently
x = y = 0
for i in range(1, N + 1):
if i & rightMostBit:
x ^= i
else:
y ^= i
if nums[i - 1] & rightMostBit:
x ^= nums[i - 1]
else:
y ^= nums[i - 1]
# identify the duplicate number from x and y
for num in nums:
if num == x:
return [x, y]
return [y, x]