Find the Number of Distinct Colors Among the Balls
MediumArrayHash TableSimulation
Solution
balls
는 현재 공의 색깔을 저장하고,colors
는 각 색깔의 개수 저장queries
를 반복하면서, 주어진 공의 이전 색깔에 대한 개수를 줄이고, 바뀐 색깔의 개수를 추가- 만약 이전의 색깔의 개수가 0보다 작아지면,
delete
를 사용하여,Map
에서 삭제 Map
의size
를 통해, 현재 총 색깔의 개수를 구할 수 있다.
export function queryResults(limit: number, queries: number[][]): number[] {
const balls = new Map<number, number>();
const colors = new Map<number, number>([]);
const answer: number[] = [];
for (const [ball, color] of queries) {
const prevColor = balls.get(ball) ?? 0;
if (prevColor !== 0) {
const prevCount = colors.get(prevColor) ?? 0;
if (prevCount <= 1) {
colors.delete(prevColor);
} else {
colors.set(prevColor, prevCount - 1);
}
}
balls.set(ball, color);
colors.set(color, (colors.get(color) ?? 0) + 1);
answer.push(colors.size);
}
return answer;
}
Complexity
- Time:
queries
를 반복하기 때문에,queries
의 길이만큼의 시간 복잡도가 소요.
- Space:
balls
는 최대limit
의 공간 복잡도를 사용,colors
는queries
의 고유한 색깔의 개수만큼의 공간 복잡도를 사용