func firstCompleteIndex(arr []int, mat [][]int) int { m := len(mat) n := len(mat[0]) type point struct { x int y int } hash := make([]point, m * n + 1) for i := 0; i < m; i++ { for j := 0; j < n; j++ { hash[mat[i][j]] = point{ x: i, y: j, } } } rows := make([]int, m) cols := make([]int, n) for i, num := range arr { r, c := hash[num].x, hash[num].y rows[r]++ cols[c]++ if rows[r] == n || cols[c] == m { return i } } return -1 }