100313. 所有球里面不同颜色的数目
给你一个整数 limit
和一个大小为 n x 2
的二维数组 queries
。
总共有 limit + 1
个球,每个球的编号为 [0, limit]
中一个 互不相同 的数字。一开始,所有球都没有颜色。queries
中每次操作的格式为 [x, y]
,你需要将球 x
染上颜色 y
。每次操作之后,你需要求出所有球中 不同 颜色的数目。
请你返回一个长度为 n
的数组 result
,其中 result[i]
是第 i
次操作以后不同颜色的数目。
注意 ,没有染色的球不算作一种颜色。
示例 1:
输入:limit = 4, queries = [[1,4],[2,5],[1,3],[3,4]]
输出:[1,2,2,3]
解释:
示例 2:
输入:limit = 4, queries = [[0,1],[1,2],[2,2],[3,4],[4,5]]
输出:[1,2,2,3,4]
解释:
提示:
1 <= limit <= 109
1 <= n == queries.length <= 105
queries[i].length == 2
0 <= queries[i][0] <= limit
1 <= queries[i][1] <= 109
原站题解
golang 解法, 执行用时: 215 ms, 内存消耗: 22.2 MB, 提交时间: 2024-05-26 19:09:42
func queryResults(_ int, queries [][]int) []int { ans := make([]int, len(queries)) color := map[int]int{} cnt := map[int]int{} for i, q := range queries { x, y := q[0], q[1] if c := color[x]; c > 0 { cnt[c]-- if cnt[c] == 0 { delete(cnt, c) } } color[x] = y cnt[y]++ ans[i] = len(cnt) } return ans }
cpp 解法, 执行用时: 401 ms, 内存消耗: 153.5 MB, 提交时间: 2024-05-26 19:09:28
class Solution { public: vector<int> queryResults(int, vector<vector<int>>& queries) { vector<int> ans; unordered_map<int, int> color, cnt; for (auto& q : queries) { int x = q[0], y = q[1]; if (auto it = color.find(x); it != color.end()) { int c = it->second; if (--cnt[c] == 0) { cnt.erase(c); } } color[x] = y; cnt[y]++; ans.push_back(cnt.size()); } return ans; } };
java 解法, 执行用时: 43 ms, 内存消耗: 80.2 MB, 提交时间: 2024-05-26 19:09:12
public class Solution { public int[] queryResults(int limit, int[][] queries) { int[] ans = new int[queries.length]; Map<Integer, Integer> color = new HashMap<>(); Map<Integer, Integer> cnt = new HashMap<>(); for (int i = 0; i < queries.length; i++) { int[] q = queries[i]; int x = q[0]; int y = q[1]; if (color.containsKey(x)) { int c = color.get(x); if (cnt.merge(c, -1, Integer::sum) == 0) { cnt.remove(c); } } color.put(x, y); cnt.merge(y, 1, Integer::sum); ans[i] = cnt.size(); } return ans; } }
python3 解法, 执行用时: 168 ms, 内存消耗: 60.9 MB, 提交时间: 2024-05-26 19:08:58
''' 用哈希表 color 维护第 x 个球的颜色,哈希表 cnt 维护每种颜色的出现次数。 ''' class Solution: def queryResults(self, _: int, queries: List[List[int]]) -> List[int]: ans = [] color = {} cnt = defaultdict(int) for x, y in queries: if x in color: c = color[x] cnt[c] -= 1 if cnt[c] == 0: del cnt[c] color[x] = y cnt[y] += 1 ans.append(len(cnt)) return ans