import java.util.*; public class RandomPermutation { public static void shuffle(int[] a) { Random rnd = new Random(); for (int i = a.length - 1; i >= 1; i--) { int j = rnd.nextInt(i + 1); int t = a[i]; a[i] = a[j]; a[j] = t; } } public static int[] getRandomPermutation(int n) { Random rnd = new Random(); int[] res = new int[n]; for (int i = 0; i < n; i++) { int j = rnd.nextInt(i + 1); res[i] = res[j]; res[j] = i; } return res; } public static int[] getRandomArrangement(int n, int m) { Random rnd = new Random(); int[] res = new int[n]; for (int i = 0; i < n; i++) res[i] = i; for (int i = 0; i < m; i++) { int j = i + rnd.nextInt(n - i); int t = res[i]; res[i] = res[j]; res[j] = t; } return Arrays.copyOf(res, m); } public static int[] getRandomCombination(int n, int m) { int[] res = getRandomArrangement(n, m); Arrays.sort(res); return res; } // for small m public static int[] getRandomArrangement2(int n, int m) { Random rnd = new Random(); Set set = new HashSet<>(); int[] res = new int[m]; while (set.size() < m) { int x = rnd.nextInt(n); if (set.add(x)) res[set.size() - 1] = x; } return res; } // Usage example public static void main(String[] args) { System.out.println(Arrays.toString(getRandomPermutation(5))); } }