java如何查找2d数组中每行的最大值

时间:2016-04-29 12:18:56

标签: java arrays multidimensional-array compiler-errors max

我正在编写一个函数来检索2d数组中每行的最大值,并返回一个1d数组,其中每个索引都相对于2d数组的列行索引。

例如,如果我有一个二维数组:

{1,2,3}
{4,5,6}
{7,8,9}

它应该返回一个

数组
{3,6,9}

到目前为止,这是我的代码:

double[] rowMaxes(double[][] nums) {
    double [] count = new double [nums.length];
    for(int i = 0; i < count.length; i++){
        for(int x = 0; x < nums[0].length; x++){
            for(int n = 0; n < nums.length; n++){
                if(nums[x][n] > count[i]){
                    count[i] = nums[x][n];
                }
            }
        }
    }
    return count;
}

5 个答案:

答案 0 :(得分:1)

不需要3个嵌套循环。你只需要两个循环:

for(int i = 0; i < count.length; i++){
    for(int x = 0; x < nums[0].length; x++){
        if(nums[i][x] > count[i]){
            count[i] = nums[i][x];
        }
    }
}

答案 1 :(得分:0)

在进入循环之前,您应该找到行和列长度。 如果要考虑负数,则首先将max定义为最小负值。 你可以用这个

public static void main(String[] args) {
        double count[][] = {{1,2,3,8},{4,6,5,9},{0,8,9,1}};
        int r = count.length;
        int c= count[0].length;
        double out[] = new double[r];
        for(int i = 0; i < r; i++){
            double max = Integer.MIN_VALUE;
            for(int x = 0; x < c; x++){
                if(count[i][x] > max)
                    max = count[i][x];
            }
            out[i] = max;
        }
        for(int i=0;i<r;i++)
            System.out.println(out[i]);

    } 

答案 2 :(得分:0)

public static int[] getMaxOfRow(int arr[][]){
    int grtr[]=new int[arr.length];
    grtr[0]=arr[0][0];
    for(int i=0;i<arr.length;i++){
        for(int j=0;j<arr[0].length;j++){
            if(arr[i][j]>grtr[i]){
                grtr[i]=arr[i][j];
            }
        }
    }
    return grtr;
}                                                                                                

答案 3 :(得分:0)

请注意,如果一行中的所有值都小于零,则代码将无效 当您创建一个新数组时,它将填充默认值 - 它为零 因为您需要在第一个循环count[i] = nums[i][0]中添加。

像这样的东西

double[] rowMaxes(double[][] nums) {
    double[] count = new double[nums.length];

    for (int i = 0; i < nums.length; i++) {
        count[i] = nums[i][0];
        for (int j = 1; j < nums[i].length; j++) {
            if (count[i] < nums[i][j]) {
                count[i] = nums[i][j];
            }
        }
    }

    return count;
}

如果使用Java 8,则可以使用stream和max方法替换内部循环。

for (int i = 0; i < nums.length; i++) {
    count[i] = Arrays.stream(nums[i]).max().getAsDouble();
}

答案 4 :(得分:0)

如果您希望将其设为一行,则这是具有任何显式循环的解决方案:

Arrays.stream(nums).mapToInt((row) -> Arrays.stream(row).max().getAsInt()).max().getAsInt()