← All problems

3160. Find the Number of Distinct Colors Among the Balls

MediumOpen on LeetCodeProblem statement

Problem Statement

3160. Find the Number of Distinct Colors Among the Balls

Medium


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.

 

Example 1:

Input: limit = 4, queries = [[1,4],[2,5],[1,3],[3,4]]

Output: [1,2,2,3]

Explanation:

Example 2:

Input: limit = 4, queries = [[0,1],[1,2],[2,2],[3,4],[4,5]]

Output: [1,2,2,3,4]

Explanation:

 

Constraints:

Java

Source file
class Solution {
    public int[] queryResults(int limit, int[][] queries) {
        HashMap<Integer, Integer> colorsFreqMap = new HashMap<>();
        HashMap<Integer, Integer> ballsColorMap = new HashMap<>();
        int[] result = new int[queries.length];
        for (int i = 0; i < queries.length; i++) {
            int x = queries[i][0], y = queries[i][1];
            if (ballsColorMap.containsKey(x)) {
                int oldColor = ballsColorMap.get(x);
                colorsFreqMap.put(oldColor, colorsFreqMap.get(oldColor) - 1);
                if (colorsFreqMap.get(oldColor) == 0)
                    colorsFreqMap.remove(oldColor);
            }
            colorsFreqMap.put(y, colorsFreqMap.getOrDefault(y, 0) + 1);
            ballsColorMap.put(x, y);
            result[i] = colorsFreqMap.size();
        }
        return result;
    }
}