Date and Time: Mar 5, 2025, 21:45 (EST)
Link: https://leetcode.com/problems/find-missing-and-repeated-values
You are given a 0-indexed 2D integer matrix grid of size n * n with values in the range [1, n^2]. Each integer appears exactly once except a which appears twice and b which is missing. The task is to find the repeating and missing numbers a and b.
Return a 0-indexed integer array ans of size 2 where ans[0] equals to a and ans[1] equals to b.
Example 1:
Input: grid = [[1,3],[2,2]]
Output: [2,4]
Explanation: Number 2 is repeated and number 4 is missing so the answer is [2,4].
Example 2:
Input: grid = [[9,1,7],[8,9,2],[3,4,6]]
Output: [9,5]
Explanation: Number 9 is repeated and number 5 is missing so the answer is [9,5].
-
2 <= n == grid.length == grid[i].length <= 50 -
1 <= grid[i][j] <= n * n -
For all
xthat1 <= x <= n * nthere is exactly onexthat is not equal to any of the grid members. -
For all
xthat1 <= x <= n * nthere is exactly onexthat is equal to exactly two of the grid members. -
For all
xthat1 <= x <= n * nexcept two of them there is exatly one pair ofi, jthat0 <= i, j <= n - 1andgrid[i][j] == x.
We can use set() to keep track of values we have visited. So we access each element from grid, and add them into set(). If an element already exists in set(), we find this repeated value.
After we add all elements into set(), we can loop over [1, len(grid)**2] to find the missing element, which doesn't exist in set().
class Solution:
def findMissingAndRepeatedValues(self, grid: List[List[int]]) -> List[int]:
# Use set to keep track of (0, n), loop over grid, and if an element exists in set() already, this is a.
# Loop over (0, n) again to find missing value b
# TC: O(n^2), n=len(grid), SC: O(n^2)
seen = set()
ans = []
# Add number into set() and find repeated value
for lst in grid:
for i in lst:
if i in seen:
ans.append(i)
seen.add(i)
# Loop over range(1, n) to find missing value
for i in range(1, len(grid)**2+1):
if i not in seen:
ans.append(i)
return ansTime Complexity:
Space Complexity: