我想知道如何在java中获得二维数组的模式。我能解决这个问题的方法有哪些?到目前为止,这是我的方法代码。编辑:另外,我忘了提到阵列必须是正数和单位数字,所以数字从0-9包括。
public static int getMostRepeatedNumber(int[][] array) {
int theMode = 0;
if(array.length < 0){
return -1;
}
for(int row = 0; row <array.length;row++){
for(int col = 0; col <array[0].length; col++){
int temp = array[row][col];
}
}
return theMode;
}
答案 0 :(得分:3)
因为array
中的元素都是单个数字(从0到9),所以我们可以使用长度为10的数组int[]freq
轻松计算和存储每个值的频率。
int[]freq = new int[10];
for(int[] row : array){
for(int val : row)
freq[val]++;
}
int mode = 0;
for(int i = 1; i < 10; i++)
if(freq[i] > freq[mode])
mode = i;
return mode;
答案 1 :(得分:1)
由于您只处理0到9之间的整数,最简单的方法是构建频率表,然后扫描最大值:
public static int getMostRepeatedNumber(int[][] array) {
if(array == null){
return -1;
}
// build frequency table
int[] frequencies = new int[10]; // all zero
for(int [] row : array){
for(int val : row){
frequencies[val]++;
}
}
// scan for the largest value
int largest = 0;
int mode = -1;
for (int i = 0; i < 10; ++i) {
if (frequencies[i] > largest) {
largest = frequencies[i];
mode = i;
}
}
return mode;
}