Shuffle a set of numbers without duplicates.
Example:
// Init an array with set 1, 2, and 3. int[] nums = {1,2,3}; Solution solution = new Solution(nums); // Shuffle the array [1,2,3] and return its result. Any permutation of [1,2,3] must equally likely to be returned. solution.shuffle(); // Resets the array back to its original configuration [1,2,3]. solution.reset(); // Returns the random shuffling of array [1,2,3]. solution.shuffle();The question actually tests about how to shuffle an array. One way is to generate a random number from the start of the array to the end, then swap current position with the generate position. Then increment start by 1 and do it again.
public class Solution { int[] orig; int[] curr; int len; final Random random; public Solution(int[] num) { len = num.length; orig = num; curr = Arrays.copyOf(num, len); random = new Random(); } /** Resets the array to its original configuration and return it. */ public int[] reset() { return this.curr = Arrays.copyOf(orig, orig.length); } /** Returns a random shuffling of the array. */ public int[] shuffle() { for (int i = 0; i < len - 1; i++) { int pos = getPos(i, len); swap(curr, i, pos); } return curr; } private int getPos(int start, int end) { return random.nextInt(end - start) + start; } private void swap(int[] num, int first, int second) { int tmp = num[first]; num[first] = num[second]; num[second] = tmp; } }
No comments:
Post a Comment