我想比较两个包含数字的数组, array2 中出现次数最多的数字(前10名)与 array1 中的数字。示例 array1 { 123 ,132,231,213,312,321,456,765,987}表示 array2 <中 123 / strong> = 6次。这意味着 123 在 array1 中出现了6次。其范围为000 - 999. array2 中的每个数字都匹配可能在 array1 中找到的6个数字。示例 123 = 123,132,231,213,312,321。不计算重复示例 111 或 177 的数字。 Array2 有一组固定的数字,而 array1 会更新。我必须使用哪种数据类型?我如何计算重新排列的数字?
这是我到目前为止所得到的;
import java.util.Arrays;
public class tuna {
public static void main(String[] args) {
int array1[] = { 123, 132, 231, 213, 312, 321};
int array2[] = { 012, 013, 014, 015, 016, 017, 018, 019, 123, 124, 125, 126, 127};
count(array1);
}
private static void count(int[] arr) {
Arrays.sort(arr);
int sum = 0, counter = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[0] == arr[arr.length - 1]) {
System.out.println(arr[0] + ": " + counter + " times");
break;
} else {
if (i == (arr.length - 1)) {
sum += arr[arr.length - 1];
counter++;
System.out.println((sum / counter) + " : " + counter
+ " times");
break;
} else {
if (arr[i] == arr[i + 1]) {
sum += arr[i];
counter++;
} else if (arr[i] != arr[i + 1]) {
sum += arr[i];
counter++;
System.out.println((sum / counter) + " : " + counter
+ " times");
sum = 0;
counter = 0;
}
}
}
}
}
}
答案 0 :(得分:0)
如果我理解正确,那么你想要计算array1中数字2中数字排列(000-999)的频率。您可以通过将array2中数字的所有排列映射到&#34;置换组&#34;,为每个这样的组分配计数器,并迭代通过array1查找组和增加计数器来完成此操作。此代码可以执行您想要的操作:
public static void main(String[] args) {
int array1[] = { 123, 132, 231, 213, 312, 321 };
int array2[] = { 12, 13, 14, 15, 16, 17, 18, 19, 123, 124, 125, 126, 127 };
count(array1, array2);
}
private static void count(int[] arr1, int[] arr2) {
// prepare a mapping of permutations of numbers in arr2 to arr2 indexes
int[] permutationGroupOfNumber = new int[1000];
Arrays.fill(permutationGroupOfNumber, -1);
for (int i = 0; i < arr2.length; i++) {
int number = Math.abs(arr2[i]) % 1000; // just to be safe
int digit1 = number % 10;
int digit2 = (number / 10) % 10;
int digit3 = (number / 100) % 10;
permutationGroupOfNumber[digit1 + digit2 * 10 + digit3 * 100] = i;
permutationGroupOfNumber[digit1 + digit3 * 10 + digit2 * 100] = i;
permutationGroupOfNumber[digit2 + digit1 * 10 + digit3 * 100] = i;
permutationGroupOfNumber[digit2 + digit3 * 10 + digit1 * 100] = i;
permutationGroupOfNumber[digit3 + digit1 * 10 + digit2 * 100] = i;
permutationGroupOfNumber[digit3 + digit2 * 10 + digit1 * 100] = i;
}
// count the number of occurrences of permutations in arr1
int[] occurrencesOfPermutationsInGroup = new int[arr2.length];
for (int i = 0; i < arr1.length; i++) {
int g = permutationGroupOfNumber[arr1[i]];
if (g >= 0)
occurrencesOfPermutationsInGroup[g]++;
}
// output number of occurrences
for (int i = 0; i < arr2.length; i++) {
int g = permutationGroupOfNumber[arr2[i]];
if (occurrencesOfPermutationsInGroup[g] > 0)
System.out.println(arr2[i] + ": " + occurrencesOfPermutationsInGroup[g] + " time(s)");
}
}