我如何获得二维数组的模式

时间:2014-09-17 03:40:20

标签: java methods multidimensional-array

我想知道如何在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;
}

2 个答案:

答案 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;
}