package git.snippet.common; import java.util.Arrays; public class Generator { // for test // 几乎有序的数组排序测试 public static int[] randomArrayNoMoveMoreK(int maxSize, int maxValue, int K) { int[] arr = new int[(int) ((maxSize + 1) * Math.random())]; for (int i = 0; i < arr.length; i++) { arr[i] = (int) ((maxValue + 1) * Math.random()) - (int) (maxValue * Math.random()); } // 先排个序 Arrays.sort(arr); // 然后开始随意交换,但是保证每个数距离不超过K // swap[i] == true, 表示i位置已经参与过交换 // swap[i] == false, 表示i位置没有参与过交换 boolean[] isSwap = new boolean[arr.length]; for (int i = 0; i < arr.length; i++) { int j = Math.min(i + (int) (Math.random() * (K + 1)), arr.length - 1); if (!isSwap[i] && !isSwap[j]) { isSwap[i] = true; isSwap[j] = true; int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } } return arr; } // for test public static int[] generateRandomArray(int maxSize, int maxValue) { // Math.random() -> [0,1) // Math.random() * N -> [0,N) // (int)(Math.random()*N) -> [0,N-1] int[] arr = new int[(int) (Math.random() * (maxSize + 1))]; for (int i = 0; i < arr.length; i++) { // [-? , +?] arr[i] = (int) ((maxValue + 1) * Math.random()) - (int) ((maxValue + 1) * Math.random()); } return arr; } public static int[] copyArray(int[] arr1) { if (arr1 == null) { return null; } int[] arr2 = new int[arr1.length]; System.arraycopy(arr1, 0, arr2, 0, arr1.length); return arr2; } public static boolean isEqual(Integer o1, Integer o2) { if (o1 == null && o2 != null) { return false; } if (o1 != null && o2 == null) { return false; } if (o1 == null) { return true; } return o1.equals(o2); } }