09 Sept 2026Go / Python / TypeScriptEasy

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
  • Python set-mismatch/solution.py
  • TypeScript set-mismatch/solution.ts

Solution files

Goset-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}
}
Pythonset-mismatch/solution.py
class Solution:
    def findErrorNums(self, nums: list[int]) -> list[int]:
        seen = [False] * (len(nums) + class="syntax-number">1)
        duplicate = -class="syntax-number">1
        for value in nums:
            if seen[value]:
                duplicate = value
            seen[value] = True
        missing = next(value for value in range(class="syntax-number">1, len(nums) + class="syntax-number">1) if not seen[value])
        return [duplicate, missing]
TypeScriptset-mismatch/solution.ts
function findErrorNums(nums: number[]): number[] {
  const seen = new Array<boolean>(nums.length + class="syntax-number">1).fill(false);
  let duplicate = -class="syntax-number">1;
  for (const value of nums) { if (seen[value]) duplicate = value; seen[value] = true; }
  for (let value = class="syntax-number">1; value <= nums.length; value += class="syntax-number">1) {
    if (!seen[value]) return [duplicate, value];
  }
  return [duplicate, -class="syntax-number">1];
}