Isaac Emmanuel
09 Sept 2026•EasyGo / Python / TypeScript

Set Mismatch

Identify the duplicated number and the missing number in a corrupted set from one through n.

Mark every observed value, recording the duplicate, then scan the expected range for the unseen value.

Complexity

O(n) time and O(n) space.

Solution files

Go•set-mismatch/solution.go
package main

func findErrorNums(nums []int) []int {
	seen := make([]bool, len(nums)+1)
	duplicate := -1
	for _, value := range nums {
		if seen[value] {
			duplicate = value
		}
		seen[value] = true
	}
	for value := 1; value <= len(nums); value++ {
		if !seen[value] {
			return []int{duplicate, value}
		}
	}
	return []int{duplicate, -1}
}
Python•set-mismatch/solution.py
class Solution:
    def findErrorNums(self, nums: list[int]) -> list[int]:
        seen = [False] * (len(nums) + 1)
        duplicate = -1
        for value in nums:
            if seen[value]:
                duplicate = value
            seen[value] = True
        missing = next(value for value in range(1, len(nums) + 1) if not seen[value])
        return [duplicate, missing]
TypeScript•set-mismatch/solution.ts
function findErrorNums(nums: number[]): number[] {
  const seen = new Array<boolean>(nums.length + 1).fill(false);
  let duplicate = -1;
  for (const value of nums) { if (seen[value]) duplicate = value; seen[value] = true; }
  for (let value = 1; value <= nums.length; value += 1) {
    if (!seen[value]) return [duplicate, value];
  }
  return [duplicate, -1];
}