Description

You are given an integer limit and a 2D array queries of size n x 2.

There are limit + 1 balls with distinct labels in the range [0, limit]. Initially, all balls are uncolored. For every query in queries that is of the form [x, y], you mark ball x with the color y. After each query, you need to find the number of distinct colors among the balls.

Return an array result of length n, where result[i] denotes the number of distinct colors after ith query.

Note that when answering a query, lack of a color will not be considered as a color.

Idea

  • Use 2 default dicts

Code

class Solution:
    def queryResults(self, limit: int, queries: List[List[int]]) -> List[int]:
        color_of_balls = defaultdict(int)
        nb_balls_per_color = defaultdict(int)
        ans = []
 
        for ball, color in queries:
            if ball in color_of_balls:
                prev_color = color_of_balls[ball]
                if prev_color == color:
                    ans.append(len(nb_balls_per_color))
                    continue
                nb_balls_per_color[prev_color] -= 1
                if not nb_balls_per_color[prev_color]:
                    del nb_balls_per_color[prev_color]
                
            color_of_balls[ball] = color
            nb_balls_per_color[color] += 1
 
            ans.append(len(nb_balls_per_color))
        return ans