Mezcla un conjunto de números sin duplicados.
Solución Java
La forma en que nos aseguramos de que la probabilidad de que cada elemento se mezcle es muy similar al problema de transmisión aleatoria.
El algoritmo es sencillo de entender, pero la pregunta es por qué funciona. Para tener un algoritmo de reproducción aleatoria que funcione, todos los elementos de los resultados de la matriz en cada posición deben ser iguales.
class Solution { int[] original = null; int[] shuffle = null; Random rand = null; public Solution(int[] nums) { original = nums; shuffle = Arrays.copyOf(nums, nums.length); rand = new Random(); } /** Resets the array to its original configuration and return it. */ public int[] reset() { shuffle = Arrays.copyOf(original, original.length); return shuffle; } /** Returns a random shuffling of the array. */ public int[] shuffle() { for(int i=0; i<shuffle.length; i++){ int x = rand.nextInt(shuffle.length-i); int idx = x+i; int tmp = shuffle[idx]; shuffle[idx] = shuffle[i]; shuffle[i] = tmp; } return shuffle; } } |