Multiplicidad de números

Escribe un método que devuelva un arreglo de pares [número, multiplicidad]. La multiplicidad de un número es la cantidad de veces que aparece en el arreglo de entrada.

Por ejemplo:

new int[] { 5, 5, 1, 1, 5, 5, 3 }
new int[][] { { 5, 4 }, { 1, 2 }, { 3, 1 } }
// 5 aparece cuatro veces, 1 aparece dos veces y 3 aparece una vez.

El arreglo final debe incluir cada número distinto una sola vez, y los pares deben estar ordenados según el momento en que cada número apareció por primera vez en el arreglo original.

Ejemplos

Program.multiplicity(new int[] { 1, 1, 1, 2, 2, 3 }) ➞ new int[][] { { 1, 3 }, { 2, 2 }, { 3, 1 } }

Program.multiplicity(new int[] { 1, 1, 1, 1, 1 }) ➞ new int[][] { { 1, 5 } }

Program.multiplicity(new int[] { 1, 5, 4, 3, 2 }) ➞ new int[][] { { 1, 1 }, { 5, 1 }, { 4, 1 }, { 3, 1 }, { 2, 1 } }

Notas

N/A